如何启用自动监视 angularJs?

How to enable auto watch angularJs?

我是 angularJs 的初学者,我认为我的 $scope.

有一个简单的变化问题

我有一个从服务器收到的对象 $scope.tasks。看起来像:

{
 2: {id: 2, name: 'name1', user: 3},
 3: {id: 3, name: 'name2', user: 1},
 4: {id: 4, name: 'name3', user: 4},
}

我还有一个在任务中更新用户的功能:

$scope.managePlannedIterationTask = function(taskId, userId) {
    var data = {
       'taskId' : taskId,
       'userId' : userId
    };
    $http.post("url", data).success(function(data, status) {
        $scope.tasks[taskId].user = userId; //#1
    });
};

我还有自定义功能$scope.test(); 此函数必须在每次任务中的用户更改后执行,例如在 //#1

处更新查询和更新后执行

我尝试使用 $watch 和 $watchCollection:

$scope.$watchCollection('tasks', function () {
    $scope.test();
})

但这无济于事。现在我必须在更新我的 $scope.tasks 时在所有地方插入 $scope.test()。这很令人悲伤。 我怎样才能自动完成?

在代码中使用 watch 不是一个好习惯。我会说当你 update 调用成功时调用 test 方法。

并且在 post 调用的 success 回调中进行另一个调用以获取更新的 tasks 列表以使您的 view 数据与服务器数据正确同步.当前,您正在为特定记录更新客户端本身的数据,这在被多个用户广泛使用的以数据为中心的应用程序中没有意义。如果假设您有 1000 个用户正在访问此应用程序,并且在您更新任何记录时,其他用户在同一页面上也有 updated/added 个任何记录。这样会在应用程序内部添加不一致的行为。所以这就是为什么我建议您再制作一个 ajax 以获取数据并使您的应用程序看起来更加一致和准确。再打一个 ajax 电话不需要 100ms,这是有充分理由支付的更少的费用。

代码

$scope.managePlannedIterationTask = function(taskId, userId) {
    var data = {
       'taskId' : taskId,
       'userId' : userId
    };
    $http.post("url", data).then(function(response) {
        var data = response.data;
        $scope.getTasks();
        $scope.test();
    });
};

$scope.getTasks = function(){
   $http.get('getTasksUrl').then(function(response){
      $scope.tasks = response.data;
   });
}

你可以写一个带有watcher的指令,放在你想要被监视的模型上。但是,如果我理解正确的话,您需要在 post 请求成功后更新页面上的数据,您可以通过在成功 post 后触发 get 请求来实现,或者在更糟糕的情况下,您可以使用路由或状态重新加载取决于您使用的路由器。