2014-06-19 73 views
0

我的控制器中有一個$scope.model對象。它的屬性在啓動時從我的服務器獲取,並綁定到視圖中的輸入字段。我可以在角度模型的語法中使用...嗎?

<input type="text" ng-model="model.name" placeholder="name"/> 
<input type="email" ng-model="model.email" placeholder="email"/> 
<!-- ... --> 

當我想循環來自服務器或表單域的這個模型的所有屬性。例如,我需要找到實際更改的屬性,只將它們發送回服務器。

$scope.save = function() { 
    // Filter changed properties 
    var changed = {}; 
    for (i in $scope.model) { 
     if (i in initial && model[i] == initial[i]) 
      continue; 
     changed[i] = model[i]; 
    } 

    // Send them to server 
    // ... 
} 

但是,我不知道AngularJS是否在內部爲我的對象添加屬性。那麼使用這個語法是否安全?或者我會循環一些我不應該看到甚至操縱的AngularJS特定屬性?

+0

親愛的downvoter,小心建議改進? – danijar

+0

angularjs會自動綁定屬性,不需要手動循環,並且它會在你的對象發生變化時觀察你的對象 –

+0

你是否試圖用'console.log($ scope.model)'來查看Angular是否已經添加了對象? – JJJ

回答

1

角度前綴自己的東西與$所以如果你想要安全檢查密鑰不以此開始。

例如,如果您使用ng-repeat角將添加$$hashKey屬性。

你永遠不會知道他們是否會在未來開始添加其他屬性,但如果他們這樣做,他們會(最有可能)按照他們的約定加上前綴。

$scope.save = function() { 
    var changed = {}; 

    // Filter changed properties 
    for (i in $scope.model) { 
     // Skip Angular prefix 
     if (i.length && i[0] == '$') 
      continue; 

     // Skip if not changed 
     if (i in initial && model[i] == initial[i]) 
      continue; 

     // Add to result 
     changed[i] = model[i]; 
    } 

    // Send them to server 
    // ... 
} 
1

在這種情況下,angular不會添加任何新屬性,因此您可以保存地遍歷屬性。

相關問題