簡體   English   中英

AngularJS:監視數組屬性

[英]AngularJS : watch array property

該問題在此處清晰可見http://plnkr.co/edit/ZphAKvZeoVtuGFSEmOKg?p=preview

假設您有一個看起來像這樣的數組

var arr = [
 {
   'a': "123",
   'b': "654"
 },
 {
   'a': "456",
   'b': "321"
 }
];

arr.foo = 'bar';

$watch ,當你(例如像這樣改變它們的對象里面的東西arr[0].a = 'hoopidoo' ),但它不會當你改變foo (像這樣的例子arr.foo = 'deedlilaa' ,或通過ng-model 。)

可能是javascripts的限制嗎? 我的意思是,當您遍歷該數組時,您只會取回對象,因此無法枚舉foo ..

檢查一下撥彈槍,看看我到底要干什么。 無論您在輸入中鍵入什么或在控制器中執行什么操作,Watch都不會觸發。

觀察Array對象屬性的唯一方法(與特定鍵處的對象相反)是顯式$watch

$scope.$watch('arr.param', function(newVal, oldVal) {
   // Some code
}
arr.param = 'foobar'

但是,如果您不希望混合使用數字鍵和關聯數組鍵,則可以將插入符的第37行更改為類似以下內容:

$scope.arr['param'] = "abc";

使用方法:

$scope.$watchCollection

特別是,您可以使用$ watchColletion監視范圍內的可變性並更新按鈕或所需的任何內容。

$scope.$watchCollection(function () {
    if ($scope.myForm)
        return $scope.myForm;
}, function () {
   if ($scope.myForm)
   if (($scope.myForm.$invalid == true))
          $scope.formValidityChange(true);
    else
        $scope.formValidityChange(false);
}, true);

這將檢查表單中所有變化的變量,然后您將更新控制器。 我認為您還可以通過比較兩個對象來檢查發生了什么變化,這可能會更困難。

Javascript數組不允許使用“字符串索引”。 arr.foo會將arr的類型從Array轉換為Object

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM