![](/img/trans.png)
[英]Why won't my JavaScript work!? It's selecting the ID but won't apply display changes
[英]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
屬性的值更改為null
或false
,那么將不會顯示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是否通過引用承擔所有任務? 這是雙向綁定嗎? 我瘋了還是什么?
似乎您使用的是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.