Javascript 角圆';t对其应用对象更改';s属性
我有一个这样的物体:Javascript 角圆';t对其应用对象更改';s属性,javascript,angularjs,data-binding,Javascript,Angularjs,Data Binding,我有一个这样的物体: $scope.user = {key: 'j16er48', name: 'Foo', title: 'Bar'} 模板为: <div ng-if="user.key">{{user.name}}</div> 什么也没发生。Angular似乎仍在观察旧对象和键的旧值 在将新对象分配给user之后,我还尝试使用$scope.$apply(),但仍然没有机会 我错过什么了吗 =更新== 经过这么多的测试,我发现在角度范围内有一个非常奇怪的行为。该问题
$scope.user = {key: 'j16er48', name: 'Foo', title: 'Bar'}
模板为:
<div ng-if="user.key">{{user.name}}</div>
什么也没发生。Angular似乎仍在观察旧对象和键的旧值
在将新对象分配给user
之后,我还尝试使用$scope.$apply()
,但仍然没有机会
我错过什么了吗
=更新==
经过这么多的测试,我发现在角度范围内有一个非常奇怪的行为。该问题的发生是由于不需要的引用赋值(或者可能是双向绑定)
我有一个名为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
对象时,我认为is已经重置,而defaultUser
已经更改,并且等于user
。现在
这正常吗?Angular是否通过引用假定所有赋值?这是双向装订吗?我疯了还是怎么了
您似乎正在使用Angular的旧版本
我创建了两个小提琴,第一个使用Angular 1.1.1(),第二个使用Angular 1.2.1()
他们都有一个非常小的控制器,不遵循任何风格指南,但应该让你的观点得到理解
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的更新版本,请使用它 你的代码一定有问题。你能把它隔离出来并放到plunker中吗?我不能重现你的问题。我把你想做的事情弄得一团糟:@Rob很可能在Omid的情况下这是一个范围继承问题
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;
};
});