Angular不会将对象更改应用于它的属性

时间:2016-03-31 17:52:41

标签: javascript angularjs data-binding

我有一个这样的对象:

$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属性的旧值。

我在向$scope.$apply()分配新对象后尝试使用user,但仍然没有机会。

我错过了什么吗?

== 更新 ==

经过这么多测试后,我在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/

1 个答案:

答案 0 :(得分:0)

您似乎正在使用旧版本的Angular。

我创建了两个Fiddles,第一个使用Angular 1.1.1(https://jsfiddle.net/dcg74epp/),第二个使用Angular 1.2.1(https://jsfiddle.net/6vy4jn6q/)。

他们都有一个非常小的控制器,并且不遵循任何风格指南,但应该明白你的意思。

d

因此,如果您可以使用更新版本的Angular,请使用它。