Aktualizacja: To musiało być coś głupiego w innej części kodu. Działa teraz, więc składnia bindToController jest w porządku.Dyrektywy AngularJS 1.4: zakres, wiązanie dwukierunkowe i bindToController
Używamy AngularJS 1.4, który wprowadził new way to use bindToController w dyrektywach.
Po sporo czytania (i być może nie rozumiejąc wszystkiego), określiliśmy nasze dyrektywa tak:
.directive('mdAddress', function mdAddress() {
var directive = {
restrict: 'EA',
scope: {},
bindToController: {
address: '='
},
templateUrl: 'modules/address/address.html',
controller: AddressController,
controllerAs: 'dir'
};
wywołanie go z innego widoku jak ten:
<md-address address="vm.address"></md-address>
Będąc wcześniej zdefiniowany w kontrolce widoku:
vm.address = {
street: null,
countryCode: null,
cityCode: null,
postalCode: null
};
Odwoływanie się do zmiennych w Przykładowy szablon dyrektywy:
<md-input-container>
<label>{{'ADDRESSNUMBER' | translate}}</label>
<input type="number" ng-model="dir.address.streetNumber">
</md-input-container>
Spędziliśmy 4 godziny próbując ustalić, dlaczego nasza dyrektywa nie działa. Cóż, działało, ale dwukierunkowe powiązanie między kontrolerem a dyrektywą nie było, vm.address.street
było beznadziejnie ustawione na zero.
Po pewnym czasie, po prostu starał stary sposób:
.directive('mdAddress', function mdAddress() {
var directive = {
restrict: 'EA',
scope: {
address: '='
},
bindToController: true,
templateUrl: 'modules/address/address.html',
controller: AddressController,
controllerAs: 'dir'
};
I to magicznie pracował. Każdy pomysł DLACZEGO?
Co masz w swoim szablonie 'modules/address/address.html'? Jeśli próbujesz odwołać się do 'vm' w ogóle w szablonie, to spowoduje to problem pusty, ponieważ' vm' nie istnieje w zakresie twojej dyrektywy. Również jeśli próbujesz po prostu powiązać 'adres' w szablonie dyrektywy, to również nie byłoby, ponieważ wiążisz kontroler jako' dir', więc musiałby to być 'dir.address' –
In szablon odwołujemy się do elementów z 'dir':' '. Zmieniłem główny post, aby to wyjaśnić. Dzięki. – LeoLozes
Proszę podać dwa plunery, w obu przypadkach. Istnieje proste wytłumaczenie tego, ale jest to zwykły tekst, który nie daje jasnego wyobrażenia o tym, co dokładnie zrobiłeś. – estus