[英]detect changes in a JS Object using Angular js
我有一個javascript對象,假設user
是我對象的名稱,在angular js中,它看起來像這樣
$scope.user = {
name:'Arpit',
class:'Computer Science',
year:'2017',
gender:'male'
}
我正在從數據庫中獲取此對象並在編輯屏幕中打開,現在,如果是HTML表單,如果用戶在編輯模式下更改了任何字段,我想使用CSS類applyborder
突出顯示特定字段。 當我更改任何字段值時,我的邏輯第一次起作用,但是當我將值重置為原始值時,應刪除該類,但不能刪除該類。 我的角度js代碼是:
//Value Change Detection
Object.keys($scope.user).filter(function (key) {
$scope.$watch('user.' + key, function (newVal, oldVal) {
if (newVal != oldVal) {
var ele = $('[ng-model="user' + '.' + key + '"]');
ele.addClass("applyborder");
}
else if(oldVal == newVal){
var ele = $('[ng-model="user' + '.' + key + '"]');
ele.removeClass("applyborder");
}
});
});
它oldVal
最后輸入的值視為oldVal
但應將其視為來自數據庫的值。 謝謝。
這是$watch
的預期行為。
您可以使用angular.copy
從數據庫收到的對象的副本:
var originalUser = angular.copy($scope.user)
。
然后檢查:
//Value Change Detection
Object.keys($scope.user).filter(function (key) {
$scope.$watch('user.' + key, function (newVal, oldVal) {
if (newVal != originalUser[key]) {
var ele = $('[ng-model="user' + '.' + key + '"]');
ele.addClass("applyborder");
}
else if(originalUser[key] == newVal){
var ele = $('[ng-model="user' + '.' + key + '"]');
ele.removeClass("applyborder");
}
});
});
只需在ng-dirty
類下應用它即可。 您可能必須隔離css范圍,因此它不會在所有地方都得到應用。
<form class='myForm'>
<input ng-model='xx' />
</form>
.myForm .ng-dirty {
background-color: yellow;
}
如果您需要重置狀態,則需要為表單命名。
<form class='myForm' name='myForm'>
$scope.myForm.$setPristine();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.