在控制器指令和工厂

时间:2015-06-10 09:41:36

标签: angularjs controller factory directive

我在工厂创建了一个全局变量。我已经在我的控制器中访问了全局变量,但是在更改指令中的值时,它无法在控制器中更新。

我的指示是

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,如何在控制器中更新它。

1 个答案:

答案 0 :(得分:3)

首先在服务中,您应该返回一个对象,其中包含您要在应用中共享的属性:

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

然后在指令

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

在控制器中你应该:

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

然后在视图上,直接引用var1

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