我正在使用以下内容深入观看名为$scope.route.waypoints
的数组:
$scope.$watch('route.waypoints', _.debounce(function (prev, cur) {
if(!$scope.initialized) return;
$scope.saveRoute(true);
console.log('route waypoints DEEP check');
}, 500), true)
在我的saveRoute
方法中我PUT
收集到服务器。
我想要做的是从服务器返回后我想再次更新我的waypoints集合中的一些属性。但是当我使用以下内容进行更新时:
if(data.linked && data.linked.waypoints.length){
$scope.route.waypoints = data.linked.waypoints;
}else{
$scope.route.waypoints = [];
}
$scope.route.days = data.routes[0].days;
再次调用$ watch,整个事情重新开始。 我怎么能避免这种情况?我尝试使用$ scope标志,但似乎它们再次被忽略。这一切都有点混乱......
答案 0 :(得分:1)
您可以使用与此数据不同的变量。例如,对于来自服务器的数据,您可以使用
$scope.route.waypoints
对于您的本地域数据,您可以使用其他域名,例如:
$scope.route.waypointsData
在这种情况下,您将获得更多控制权,因为您的服务器数据和本地数据将被分开
更新1
所以我的建议是
$scope.$watch('route.waypoints', _.debounce(function (prev, cur) {
//update data in this place $scope.route.waypointsData
}, 500), true)
然后也转向观察者
$scope.$watch('route.waypointsData ', _.debounce(function (prev, cur) {
// do your PUT method in that place
}, 500), true)
并在ng-repeat中使用waypointsData。您正在手动同步模型之间的数据。
答案 1 :(得分:0)
好的,我通过扔掉一般的$手表解决了这个问题。在阅读了这篇优秀文章之后:http://www.benlesh.com/2013/10/title.html我致力于将所有内容移至ng-change指令并在必要时执行。 $ watches引入了一个不可测试的魔法,这是我问题的根源,它只是不再可读了。