2017-06-06 6 views
1

工場から提供されるオブジェクトの変更を監視する場合、AngularJSの特定の動作を理解したいと思います。工場オブジェクトのAngularJS監視プロパティ - 予期しない動作

コントローラまたはhtmlの工場提供オブジェクトのプロパティを読み込むかどうかによって、動作が異なります。

は、ビューにプロパティを表示する、次の2つの方法の比較:オブジェクト全体があるときtestFactoryでのプロパティの変更は、変更が唯一の最初のケースでビューで更新され

app.controller("testController", function($scope, testFactory){ 
    $scope.test_obj = testFactory.read(); 
    $scope.test_prop = testFactory.read().prop; 
}); 

<div>{{test_obj.prop}}</div> 
<div>{{test_prop}}</div> 

スコープに宣言され、プロパティはビューで呼び出されます。プロパティがスコープに直接宣言されると、ビューで自動的に更新されません。

この現象は、次のjsfiddleで観察することができます。https://jsfiddle.net/fb86p4fm/

は、この現象の理由は何ですか?

答えて

2

$ scope.test_prop = testFactory.read()。prop;

上記の行では、propの初期値は0です。javascriptでは、数値は値でコピーされますが、オブジェクト/配列は参照によるものです。 $ scope.test_obropはサービスオブジェクトを参照していますが、$ scope.test_propは参照していません。

1

$scope.test_objは、工場のobjへの参照であり、$scope.test_propはコピーされた値がobj.propであると言います。

あなたはあなたの例に以下を追加した場合:。

console.log(testFactory.read()); // output : Object {prop: 0} 
console.log(testFactory.read().prop); // output 0 

をあなたはreadメソッドは、オブジェクトや読み取りを(返すことを参照してくださいね)小道具は値を返します。

+0

多くの意味があります。なぜ$ scope.test_objは参照になりますが、$ scope.test_propは参照ではなくコピーになりますか? –

+0

@JohnRoseは更新を参照してください –

+0

はい、オブジェクトと値が返されています。私はあなたの答えの最初の部分についての知識を忘れていました.JavaScriptで変数を宣言すると、数値がコピーされ、オブジェクトが参照されます。ご協力ありがとうございました! –

関連する問題