$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সেটটিতে intoোকানো হয়েছে । আমি প্রস্তুত একটি টেবিল প্রতিবার "অ্যাড" বোতামটি চাপলে আপডেট হয়।
<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জন্য যে নির্দেশিকাটি সেট আপ করেছিলাম তা যখন ঘটে থাকে তখন তা বরখাস্ত করা হয় না।
আমি এইচটিএমএলে আমার ট্যাগটি সংজ্ঞায়িত করেছি:
<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?
ifবিবৃতি স্যুইচ আপ করব ।