[英]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.