2016-03-31 5 views
0

が、私はこのようなオブジェクト持っています:角度がそれにオブジェクトの変更を適用しませんプロパティ

$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'} 

何も起こりません。角度はまだ古いオブジェクトと古い値のkeyプロパティを見ているようです。

また、userに新しいオブジェクトを割り当てた後に$scope.$apply()を使用しようとしましたが、それでもチャンスはありません。

何か不足していますか?

== UPDATEそんなにテスト後 ==

私は角度範囲で非常に奇妙な行動を発見しました。この問題は、参照(または双方向バインディング)による不要な割り当てによって発生します。

私はdefaultUserというオブジェクトを持っています:{key: false, name: 'Foo', title: 'Bar'}です。これを仮定すると:私は再びdefaultUseruserへオブジェクトを割り当てるしようとしたとき

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は、リセットされたと思いました。たった今。

これは正常ですか? Angularはすべての割り当てを参照すると仮定していますか?それは双方向の拘束ですか?私は夢中になったのですか?

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

+0

コードに何か誤りがあります。それを分離してプランナーに投稿できますか? –

+4

問題が再現できません。 – Rob

+1

私はあなたがやろうとしていることを思いついたのですか:https://jsfiddle.net/g1b5xomz/ – Rob

答えて

0

あなたが角度の古いバージョンを使用しているようです。

私は2つのFiddlesを作成しました。最初はAngular 1.1.1(https://jsfiddle.net/dcg74epp/)を使用し、2番目は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; 
    }; 
}); 

したがって、より新しいバージョンの角度を使用することができます。

+0

質問が更新されました – Omid

関連する問題