2016-11-30 68 views
0

我有一个JavaScript对象假设user是我对象的名称和角JS它看起来像这样使用检测一个JS对象的变化角度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但它应该把到来自数据库中的值。谢谢。

+0

'else if(oldVal == newVal){'是两个空格的拼写错误? – Sravan

+0

@Sravan是相关的吗? –

+0

不知道,只是想改正语法。所以我只是问了一个问题,以便在错误的时候纠正错误。 – Sravan

回答

1

这是$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"); 
       } 
      }); 
     }); 
+0

这工作正常,但我有一些日期字段它不适用于日期字段。我们是否需要在某处添加一些新的Date()? –

0

只是其应用在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();