Обновление. Должно быть, это было что-то глупое в другой части кода. Теперь он работает, поэтому синтаксис bindToController прекрасен.
Мы используем AngularJS 1.4, который ввел директиву новый способ использования bindToController.
После небольшого количества чтения (и, возможно, не понимая всего) мы определили нашу директиву следующим образом:
.directive('mdAddress', function mdAddress() {
var directive = {
restrict: 'EA',
scope: {},
bindToController: {
address: '='
},
templateUrl: 'modules/address/address.html',
controller: AddressController,
controllerAs: 'dir'
};
Вызов из другого вида:
<md-address address="vm.address"></md-address>
Ранее определенный в контроллере представления:
vm.address = {
street: null,
countryCode: null,
cityCode: null,
postalCode: null
};
Ссылка на переменные в шаблоне директивы следующим образом:
<md-input-container>
<label>{{'ADDRESSNUMBER' | translate}}</label>
<input type="number" ng-model="dir.address.streetNumber">
</md-input-container>
Мы потратили 4 часа, пытаясь понять, почему наша директива не работает. Ну, он работал, но двухсторонняя привязка между контроллером и директивой не была, vm.address.street
был безнадежно установлен на нуль.
Через некоторое время мы просто попробовали старый способ:
.directive('mdAddress', function mdAddress() {
var directive = {
restrict: 'EA',
scope: {
address: '='
},
bindToController: true,
templateUrl: 'modules/address/address.html',
controller: AddressController,
controllerAs: 'dir'
};
И это волшебно сработало. Любая идея ПОЧЕМУ?