2015-06-10 41 views
0

我在工廠中創建了一個全局變量。我已經訪問了我的控制器中的全局變量,但是在更改指令中的值時,它無法在控制器中更新。訪問控制器指令和工廠之間的數據

我的指令

myApp.directive('quiz', function(quizFactory) { 
return { 
    restrict: 'AE', 
    scope: {}, 
    templateUrl: 'templete.html', 
    controller: function($scope){ 
    }, 
    link: function(scope, elem, attrs,UserService) { 
     scope.start = function() { 
      UserService.var1=true; 
      } 
     } 
     }; 

我廠是

myApp.factory('UserService', function() { 
return { 
    var1 : false 
    }; 
}); 

我控制器

myApp.controller('LearnSetQue', ['$scope','UserService', 
function($scope,UserService){ 

    $scope.var2=UserService.var1; 
    $scope.var3=UserService.var1; 
    } 
]); 

這裏開始爲按鈕功能

<button ng-click="start()">Start</button> 

這裏點擊開始按鈕後,var1應該變爲真var1=true,var2=true and var3=true以及如何在控制器中更新它。在該指令

scope.start = function() { 
    UserService.getProperties().var1=true; 
} 

myApp.factory('UserService', function() { 
var properties = { var1: false }; 
return { 
    getProperties : function() { return properties; } 
    }; 
}); 

在當時及其控制器,你應該有:

回答

3

首先在服務,你應該跟你想跨應用分享屬性返回一個對象:

myApp.controller('LearnSetQue', ['$scope','UserService', 
function($scope,UserService){ 
    $scope.properties = UserService.getProperties(); 
]); 

然後在視圖上,直接引用var1

<div>{{ properties.var1 }}</div> 
+0

我會做同樣的事情,但直接在我的工廠而不是函數返回屬性。綁定將在UserService.properties.var1等...仍然是一個很好的答案。 – Okazari

+0

@RamanaUday除了這個很好的答案,你可以閱讀這篇文章http://stackoverflow.com/questions/30508773/ngrepeat-not-updating-after-model-changed/30510369#30510369解釋爲什麼它不工作變量而不是服務/工廠中的對象 – Okazari

+0

在鏈接函數中注入工廠時也存在語法錯誤(不含'require')。它應該在這一行中引用'myApp.directive('quiz',function(quizFactory)' –

相關問題