美元的范围.$watch完整的形式,但旧价值只有一次
$scope.$watch whole form, but get old value only once
我想使用$scope。$watch监视我的整个表单输入并检测更改,然后显示警报"数据已更改"。请保存"。问题是,我想传递oldValue只有当数据是从服务器获得。
$http({
method: "post",
url: "url",
data: {
Pages: {
id: pageId
}
},
headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
}).success(function(data) {
$scope.data = data.editedPage.jkOutputContainer.editedPage.pagesObject;
$scope.$watch('data',function(newValue, oldValue) {
if(newValue != oldValue) {
$scope.dataHasChanged = true;
} else {
$scope.dataHasChanged = false;
}
}, true);
});
我可以在我的表单中使用ng-init和ng-change对每个输入,但我想使用$范围。注意表格。
编辑:简而言之,我想隐藏警报当用户返回他的更改状态,它是从服务器得到的
$scope.watch('[formname]', checkChanged, true)
function checkChanged(newVal) {
if (!angular.equals(newVal,$scope.data)) warnUser()
}
^这将监视表单中的每个表达式并警告用户
要解决您的问题,不要将服务器的响应绑定到$scope
变量,而只需将其分配给脚本中引用的变量。下面是一个例子。
$http({
method: "post",
url: "url",
data: {
Pages: {
id: pageId
}
},
headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
}).success(function(data) {
// To solve your problem, just store the server data in a variable.
var fromServer = data.editedPage.jkOutputContainer.editedPage.pagesObject;
$scope.data = fromServer; //<- Reference the var here.
$scope.$watch('data',function(newValue, oldValue) {
if(newValue != fromServer) { //<- Reference the var here.
$scope.dataHasChanged = true;
} else {
$scope.dataHasChanged = false;
}
}, true);
});
希望这对你有帮助!
相关文章:
- Javascript返回值只在循环中返回一次
- Jquery FadeIn FadeOut 只工作一次
- Javascript html每点击一次就会更改url
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- Rails操作只调用一次,但我在ajax中每秒钟都调用一次
- jQuery滚动功能只工作一次
- 刷新导致我的帖子“;张贴“;再一次
- 引导程序崩溃一次只能看到一个
- 有没有一个抽象层,这样我就可以集成一次,然后使用pusher、pubnub或faye
- 加载器组件仅加载一次
- 根据Angular.JS上一次的内容禁用选择
- 一次又一次地在新的和相同的选项卡中打开一个url
- 强制 $scope.$watch 只开火一次
- $watch回调每次在浏览器中触发,但在测试期间只触发一次
- 为什么我的$watch只烧过一次
- 如何使$watch只触发一次
- 美元的范围.$watch完整的形式,但旧价值只有一次
- 为什么angularJs的$watch只运行一次
- Angular$watch仅通过onclick触发一次
- $watch只触发一次