如何启用自动监视 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 请求来实现,或者在更糟糕的情况下,您可以使用路由或状态重新加载取决于您使用的路由器。
我是 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 请求来实现,或者在更糟糕的情况下,您可以使用路由或状态重新加载取决于您使用的路由器。