簡體   English   中英

Angular不會將對象更改應用於其屬性

[英]Angular won't apply object changes to it's properties

我有一個這樣的對象:

$scope.user = {key: 'j16er48', name: 'Foo', title: 'Bar'}

模板是:

<div ng-if="user.key">{{user.name}}</div>

現在,如果我直接將key屬性的值更改為nullfalse ,那么將不會顯示div 但是,如果我將整個對象更改為此:

$scope.user = {key: false, name: 'Foo', title: 'Bar'}

什么都沒發生。 Angular似乎仍在監視舊對象和key屬性的舊值。

在向user分配新對象后,我也嘗試使用$scope.$apply() ,但仍然沒有機會。

我想念什么嗎?

== 更新 ==

經過如此多的測試,我發現Angular范圍內有一個非常奇怪的行為。 發生此問題的原因是通過引用進行了不必要的分配(或者可能是雙向綁定)。

我有一個名為defaultUser的對象,它是: {key: false, name: 'Foo', title: 'Bar'} 假設這樣:

var defaultUser = {key: false, name: null, title: null};

$scope.user = defaultUser;

// here I change a property of $scope.user
$scope.user.key = 'j16er48';

$scope.resetUser = function(){
    // Now defaultUser.key equals 'j16er48'
    alert(defaultUser.key);

    // That's why this line does nothing
    $scope.user = defaultUser;
}

因此,當我嘗試再次將defaultUser分配給user對象時,我以為已重置,而defaultUser已更改且等於user 馬上。

那是正常的嗎? Angular是否通過引用承擔所有任務? 這是雙向綁定嗎? 我瘋了還是什么?

https://jsfiddle.net/amraei/g1b5xomz/3/

似乎您使用的是Angular的舊版本。

我創建了兩個小提琴,第一個使用Angular 1.1.1( https://jsfiddle.net/dcg74epp/ ),第二個使用Angular 1.2.1( https://jsfiddle.net/6vy4jn6q/ )。

它們都有一個非常小的控制器,並且不遵循任何樣式准則,但應該可以使您理解。

app.controller('TestController', function ($scope) {
  $scope.user = {key: 'j16er48', name: 'Foo', title: 'Bar'};
  var secondUser = {key: false, name: 'Foo', title: 'Bar'};
  var tmp;

  $scope.changeUser = function () {
    tmp = $scope.user;
    $scope.user = secondUser;
    secondUser = tmp;
  };
});

因此,如果可以使用較新版本的Angular,請使用它。

暫無
暫無

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

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