Làm cách nào tôi có thể kích hoạt một $watch
biến trong chỉ thị Angular khi thao tác dữ liệu bên trong (ví dụ: chèn hoặc xóa dữ liệu), nhưng không gán một đối tượng mới cho biến đó?
Tôi có một bộ dữ liệu đơn giản hiện đang được tải từ tệp JSON. Bộ điều khiển góc của tôi thực hiện điều này, cũng như xác định một vài chức năng:
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() {
};
});
Tôi có một hàm <button>
được gọi đúng là $scope.add
hàm và đối tượng mới được chèn đúng vào $scope.data
tập hợp. Một bảng tôi đã thiết lập sẽ cập nhật mỗi lần tôi nhấn nút "thêm".
<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>
Tuy nhiên, một lệnh tôi thiết lập để xem $scope.data
sẽ không bị hủy khi tất cả điều này xảy ra.
Tôi xác định thẻ của mình trong HTML:
<d3-visualization val="data"></d3-visualization>
Được liên kết với chỉ thị sau đây (được cắt bớt cho sự tỉnh táo của câu hỏi):
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!");
});
}
}
});
Tôi nhận được "I see a data change!"
tin nhắn ngay từ đầu, nhưng không bao giờ sau khi tôi nhấn nút "thêm".
Làm cách nào tôi có thể kích hoạt $watch
sự kiện khi tôi chỉ thêm / xóa đối tượng khỏi data
đối tượng, không nhận toàn bộ dữ liệu mới để gán cho data
đối tượng?
if
tuyên bố.