У меня есть одна изолированная директива по областям и четкая петля в ng-repeat.Изолированная директива scope в ng-repeat не работает, как ожидалось
HTML
Controller (parent scope):
<br /> kids: {{kids}}
<br /> lonelyKid: {{lonelyKid}}
<br />
<hr /> Directive (ng-repeat):
<br />
<div ng-repeat="k in kids">
<button ng-click="communicator.clear()">Clear Data</button>
<kid k="k" communicator="communicator"></kid>
</div>
<hr /> Directive (not ng-repeat):
<br />
<button ng-click="communicator.clear()">Clear Data</button>
<kid k="lonelyKid" communicator="communicator"></kid>
JS
var app = angular.module('myApp', []);
app.directive("kid", function() {
return {
restrict: 'E',
template: '<input type="text" ng-model="k.name"><br>{{k.name}}<br>',
scope: {
k: "=",
communicator: "="
},
controller: function($scope) {
$scope.k = angular.copy($scope.k);
$scope.communicator.clear = function() {
console.log($scope.k)
$scope.k.name = ''
console.log($scope.k)
}
}
};
});
app.controller('myController', function($scope) {
$scope.kids = [{
name: "Ang",
age: 15
}, {
name: "Ying",
age: 14
}, {
name: "Ellie",
age: 2
}, {
name: "Smith",
age: 10
}];
$scope.lonelyKid = {
name: "Ming",
age: 9
};
$scope.communicator = {};
});
Когда я нажал на кнопку Очистить содержимое соответствующую директиву должны получить четкие. Но в моем коде, если я нажал на кнопку очистки первого элемента, он очищает последние данные элемента в ng-repeat, а не в первом элементе. То же самое, если мы нажимаем кнопку 2nd, 3rd или clear, которая не существует в цикле, она очищает последний элемент цикла.
Пожалуйста, скажите мне, почему это происходит? и как я могу решить эту проблему?
Можете ли вы объяснить, что должен делать «коммуникатор»? Также эта строка выглядит подозрительной: '$ scope.k = angular.copy ($ scope.k);' и, вероятно, является причиной проблемы, которую вы описываете. – mika
Я хочу вызвать функцию директивы из шаблона, который находится за пределами директивы. т.е. контроллер и изолированная директивная связь. коммуникатор используется только для этого. И angular.copy заключается в том, чтобы избежать двухсторонней привязки данных. Я не думаю, что угловая. – User2