Обновление: Должно быть, это было что-то глупое в другой части кода. Теперь он работает, поэтому синтаксис bindToController в порядке.AngularJS 1.4 директивы: область применения, двустороннее связывание и bindToController
Мы используем AngularJS 1.4, который ввел директивы new way to use 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
};
Ссылка на переменные в th е шаблон директивы, как это:
<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'
};
И это волшебно работал. Любая идея ПОЧЕМУ?
Что вы нашли в своем шаблоне 'modules/address/address.html'? Если вы пытались ссылаться на 'vm' вообще в шаблоне, то это вызовет нулевую ошибку, поскольку' vm' не существует в рамках вашей директивы. Кроме того, если вы пытались просто привязать к 'address' в шаблоне директивы, это также не существовало бы, поскольку вы привязываете ваш контроллер как' dir', поэтому это должно быть 'dir.address' –
In в шаблоне мы ссылались на элементы с 'dir':' '. Я отредактировал главный пост, чтобы прояснить это. Благодарю. – LeoLozes
Пожалуйста, предоставьте два плунжера для обоих случаев. Для этого есть простое объяснение, но простой текст не дает четкого представления о том, что именно вы сделали. – estus