无法从角度app.factory获取值

时间:2015-06-23 20:30:45

标签: javascript angularjs

我正在尝试在控制器之间共享变量,所以我正在使用角度的工厂。我有以下代码:

var app = angular.module('chartApp', ['ngRoute']);

app.factory('UserVerified', function() {
    return {bool: false}; 
});

app.config(function ($routeProvider) {
    $routeProvider
    .when('/',{
        templateUrl: 'pages/home.html',
        controller: 'PredictionController'
    })  
});

app.controller('PredictionController', ['$scope', '$http', '$interval', function($scope, $http, $interval){

    $scope.hasPermission = UserVerified;

}]);

在HTML上,我只是使用hasPermission.bool来设置<div>的可见性。

但问题是angularjs无法识别&#34; app.factory&#34;中定义的UserVerified。

我收到以下错误:

ReferenceError: UserVerified is not defined

我提到了以下内容:Share data between AngularJS controllers

我能找到的唯一区别是,我正在使用上述链接中的示例中未使用的依赖项。

3 个答案:

答案 0 :(得分:1)

你需要这样做,

app.controller('PredictionController', ['$scope', '$http', '$interval', 'UserVerified',  function($scope, $http, $interval, UserVerified){

    $scope.hasPermission = UserVerified.bool;

}]);

您需要将服务作为参数传递给控制器​​

答案 1 :(得分:1)

您需要在控制器中注入自定义服务

 app.controller('PredictionController', ['$scope', '$http', '$interval','UserVerified',function($scope,$http,$interval,UserVerified) {

     $scope. hasPermission = UserVerified.bool; //true

  }]);

为了避免在缩小代码后破坏您的应用程序,您还可以使用$ inject in angularjs来注入依赖。

 app.controller("PredictionController",PredictionController);

 PredictionController.$inject = [$scope','$http','$interval','UserVerified']//dependencies



 function PredictionController($scope,http,interval,UserVerified){
   $scope. hasPermission = UserVerified.bool; //true
  }

注意:服务名称将在缩小后重命名,并可能沉迷于破坏您的应用程序

答案 2 :(得分:0)

您需要将UserVerified注入您的控制器。

app.controller('PredictionController', ['$scope', '$http', '$interval', 'UserVerified', function($scope, $http, $interval, UserVerified){

    $scope.hasPermission = UserVerifiedvalue.;

}]);

另外,在UserVerified中,您将返回一个保留字的密钥。它会起作用,但会造成不必要的混乱。

app.factory('UserVerified', function() {
    return {value: false}; 
});

Here是一名演员。