2016-02-16 52 views
2

我想了解如何綁定在angularJS中工作。 我試圖儘可能簡單地創建代碼來向您展示mu問題。 我知道如何使用這個,但我不知道它是如何工作的。控制器和AngularJS工廠之間的綁定

這是我的例子。在這裏面我有3個範圍變量: Plunker

<pre>{{A}}</pre> 
<pre>{{B}}</pre> 
<pre>{{C()}}</pre> 

這些定義如下:

$scope.A = factory; 
    $scope.B = factory.a; 
    $scope.C = function() { 
    return factory.a.b; 
    }; 

工廠命名爲 「工廠」 返回當前對象:

a: {'b': 'foo'} 

超時更新工廠這方式:

$timeout(function() { 
    factory.a = { 
     'b': 'BOO' 
    } 
    }, 1000); 

我想問問,如果有人能給我清楚的答案,爲什麼只有第一(A)和第三(C)超時後更新,但不是第二個。

+2

B是Angular中的一個集合(對象)。值和函數將在摘要上更新,在「髒」檢查期間不會檢測對象屬性。 – ryan0319

回答

0

情況B不會更改,因爲$scope.B不會更改。

factory.a = {b: 'foo'}; 
    $scope.B = factory.a; 

    $timeout(function() { 
    factory.a = {'b': 'BOO'}; 
    }, 1000); 

$timeout功能改變factory.a$scope.B仍指向以前的對象,{b: 'foo'}


情況A變化,因爲內容$scope.A變化。

$scope.A = factory; 

即使對象參考命名factory不改變,則內容的參考變化


案例C變化,因爲函數的返回值的變化。

$scope.C = function() { 
    return factory.a.b; 
    }; 

每個摘要循環,AngularJS框架都會對該函數進行評估,並隨時更新DOM。

+0

「當$ timeout函數更改factory.a時,$ scope.B仍然指向前一個對象{b:'foo'}。」 - 但爲什麼? – Przemek

相關問題