ฉันจะทริกเกอร์$watch
ตัวแปรในคำสั่งเชิงมุมได้อย่างไรเมื่อจัดการข้อมูลภายใน (เช่นการแทรกหรือลบข้อมูล) แต่ไม่ได้กำหนดอ็อบเจกต์ใหม่ให้กับตัวแปรนั้น
ฉันมีชุดข้อมูลง่ายๆที่กำลังโหลดจากไฟล์ JSON ตัวควบคุมเชิงมุมของฉันทำสิ่งนี้รวมทั้งกำหนดฟังก์ชันบางอย่าง:
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() {
};
});
ฉันมีสิ่ง<button>
ที่เรียกว่า$scope.add
ฟังก์ชันอย่างถูกต้องและวัตถุใหม่จะถูกแทรกลงใน$scope.data
ชุดอย่างถูกต้อง ตารางที่ฉันตั้งค่าจะอัปเดตทุกครั้งที่กดปุ่ม "เพิ่ม"
<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>
อย่างไรก็ตามคำสั่งที่ฉันตั้งค่าเพื่อรับชม$scope.data
จะไม่ถูกเริ่มทำงานเมื่อทั้งหมดนี้เกิดขึ้น
ฉันกำหนดแท็กของฉันใน HTML:
<d3-visualization val="data"></d3-visualization>
ซึ่งเกี่ยวข้องกับคำสั่งต่อไปนี้ (ตัดแต่งเพื่อความมีเหตุผลของคำถาม):
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!");
});
}
}
});
ฉันได้รับ"I see a data change!"
ข้อความในตอนเริ่มต้น แต่ไม่ได้รับหลังจากที่ฉันกดปุ่ม "เพิ่ม"
ฉันจะทริกเกอร์$watch
เหตุการณ์ได้อย่างไรเมื่อฉันแค่เพิ่ม / ลบวัตถุออกจากdata
วัตถุโดยไม่ได้รับชุดข้อมูลใหม่ทั้งหมดเพื่อกำหนดให้กับdata
วัตถุ