我有一个这样的对象:
$scope.user = {key: 'j16er48', name: 'Foo', title: 'Bar'}
模板是:
<div ng-if="user.key">{{user.name}}</div>
现在,如果我直接将key
属性的值更改为null
或false
,则不会显示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是否通过引用承担所有分配?这是一种双向约束吗?我疯了还是还有什么?
答案 0 :(得分:0)
您似乎正在使用旧版本的Angular。
我创建了两个Fiddles,第一个使用Angular 1.1.1(https://jsfiddle.net/dcg74epp/),第二个使用Angular 1.2.1(https://jsfiddle.net/6vy4jn6q/)。
他们都有一个非常小的控制器,并且不遵循任何风格指南,但应该明白你的意思。
d
因此,如果您可以使用更新版本的Angular,请使用它。