我已經編輯下面的代碼筆源,我敢肯定有這樣做的一個簡單的方法,但我只是想這和它的作品,它應該開始你在正確的道路上:
<ul ng-app="app" ng-controller="ctrl">
<dir model="data.children" child="child" ng-repeat="child in data.children"></dir>
</ul>
var app = angular.module('app', []);
app.controller('ctrl', function($scope){
$scope.data = {};
$scope.data.children = [
{name: 'Ben'},
{name: 'Heffler'},
{name: 'Schubert'}
];
$scope.$watchCollection('data.children', function(){
console.log("children shallow watch", $scope);
});
$scope.$watch('data.children', function(){
console.log("children deep watch",$scope);
}, true);
});
app.directive('dir', function(){
return {
restrict: 'E',
scope: {
model: '=',
child:'='
},
replace: true,
template: '<div>{{child.name}} <button ng-click="remove()">Remove</button></div>',
link: function(scope, element, attrs){
scope.remove = function(){
// I'm just deleting the first one as an example.
delete(scope.model[0]);
console.log("children inner scope", scope)
}
}
};
});
我不確定你爲什麼要刪除這些屬性,但我相信你有你的理由,只是爲了向你展示它是可能的。
EDIT
這裏是編輯的代碼筆(參見控制檯日誌,以查看在範圍已刪除項目)。 http://cdpn.io/Ghmvk
「但是,刪除$ scope.model不會傳播」。 如何刪除'$ scope.model'? – Neozaru
刪除($ scope.model),我很想知道一個更好的方法。你可以在codepen中看到它:http://codepen.io/goodafternoon/pen/rneKa – nimrod
也許你正在刪除「$ scope.model」結構,但是這個結構沒有指向值。 Try $ scope.model = null – Neozaru