2016-11-30 99 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();