Bagaimana saya bisa memicu $watch
variabel dalam arahan sudut ketika memanipulasi data di dalamnya (misalnya, memasukkan atau menghapus data), tetapi tidak menetapkan objek baru ke variabel itu?
Saya memiliki dataset sederhana yang sedang dimuat dari file JSON. Pengontrol Angular saya melakukan ini, serta mendefinisikan beberapa fungsi:
App.controller('AppCtrl', function AppCtrl($scope, JsonService) {
// load the initial data model
if (!$scope.data) {
JsonService.getData(function(data) {
$scope.data = data;
$scope.records = data.children.length;
});
} else {
console.log("I have data already... " + $scope.data);
}
// adds a resource to the 'data' object
$scope.add = function() {
$scope.data.children.push({ "name": "!Insert This!" });
};
// removes the resource from the 'data' object
$scope.remove = function(resource) {
console.log("I'm going to remove this!");
console.log(resource);
};
$scope.highlight = function() {
};
});
Saya memiliki fungsi <button>
yang disebut dengan benar $scope.add
, dan objek baru dimasukkan dengan benar ke dalam $scope.data
himpunan. Tabel yang saya atur tidak memperbarui setiap kali saya menekan tombol "add".
<table class="table table-striped table-condensed">
<tbody>
<tr ng-repeat="child in data.children | filter:search | orderBy:'name'">
<td><input type="checkbox"></td>
<td>{{child.name}}</td>
<td><button class="btn btn-small" ng-click="remove(child)" ng-mouseover="highlight()"><i class="icon-remove-sign"></i> remove</button></td>
</tr>
</tbody>
</table>
Namun, arahan yang saya atur untuk menonton $scope.data
tidak dipecat ketika semua ini terjadi.
Saya mendefinisikan tag saya dalam HTML:
<d3-visualization val="data"></d3-visualization>
Yang dikaitkan dengan arahan berikut (dipangkas untuk kewarasan pertanyaan):
App.directive('d3Visualization', function() {
return {
restrict: 'E',
scope: {
val: '='
},
link: function(scope, element, attrs) {
scope.$watch('val', function(newValue, oldValue) {
if (newValue)
console.log("I see a data change!");
});
}
}
});
Saya mendapatkan "I see a data change!"
pesan di awal, tetapi tidak pernah setelah saya menekan tombol "add".
Bagaimana saya bisa memicu $watch
acara ketika saya hanya menambahkan / menghapus objek dari data
objek, tidak mendapatkan dataset baru untuk ditugaskan ke data
objek?
if
pernyataan itu.