2013-04-15 78 views
67

我有一個變量,將由一個或多個控制器使用,由服務進行更改。 在這種情況下,我已經構建了一個服務,將這個變量保存在內存中,並在控制器之間共享。從服務/工廠到控制器的綁定變量

問題是:每當變量發生變化時,控制器中的變量都不會實時更新。

我創建這個小提琴幫助。 http://jsfiddle.net/ncyVK/

---請注意,當我遞增計數值時,{{countService}}{{countFactory}}從不更新。

如何在Controller中將服務/工廠變量綁定到$ scope.variable?我做錯了什麼?

回答

115

您無法綁定變量。但是你可以綁定變量訪問器或者包含這個變量的對象。這裏是固定的jsfiddle

基本上你必須傳遞一定範圍的東西,它可以返回/或保存當前值。例如。

廠:

app.factory('testFactory', function(){ 
    var countF = 1; 
    return { 
     getCount : function() { 

      return countF; //we need some way to access actual variable value 
     }, 
     incrementCount:function(){ 
      countF++; 
      return countF; 
     } 
    }    
}); 

控制器:

function FactoryCtrl($scope, testService, testFactory) 
{ 
    $scope.countFactory = testFactory.getCount; //passing getter to the view 
    $scope.clickF = function() { 
     $scope.countF = testFactory.incrementCount(); 
    }; 
} 

查看:

<div ng-controller="FactoryCtrl"> 

    <!-- this is now updated, note how count factory is called --> 
    <p> This is my countFactory variable : {{countFactory()}}</p> 

    <p> This is my updated after click variable : {{countF}}</p> 

    <button ng-click="clickF()" >Factory ++ </button> 
</div> 
+0

所以基本上,工廠僅僅是所述數據的數據和功能的共享(singleton)的容器中。你手動管理/同步數據進出$範圍? – sambomartin

+1

@sambomartin正確。好文章[here](http://fdietz.github.io/recipes-with-angular-js/controllers/sharing-code-between-controllers-using-services.html) – user4815162342

+2

所以通過傳遞函數testFactory.getCount而不是調用它,並在UI中調用它來綁定服務值。而如果你使用$ scope.countFactory = testFactory.getCount(),你只需要在初始化時調用一次函數,而沒有任何限制?所以如果價值改變,以後不更新? – mtpultz

0

這不是綁定從服務中的任何數據好主意,但如果你需要它了,我建議你以下兩種方式。

1)獲取數據不在你的service.Get數據在你的控制器內,你不會有任何問題來綁定它。

2)您可以使用AngularJs Events功能。您甚至可以通過該事件發送數據。

如果你需要更多的例子,這裏是可能可以幫助你的文章。

http://www.w3docs.com/snippets/angularjs/bind-value-between-service-and-controller-directive.html

相關問題