ng-repeatで1つの分離スコープ・ディレクティブとクリア・ボタン・ループがあります。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は双方向データバインディングを回避するためのものです。私はangular.copyが問題を引き起こしているとは思わない。 – User2