如何在angular.js控制器中使用服务?

时间:2016-06-07 06:44:38

标签: angularjs

我已经创建了该服务,但我没有在控制器中使用此服务。

(function(){
    'use.strict';

    angular
     .module('app.core')
     .factory('shareBtwnCtrlr', shareBtwnCtrlrService);

    /** @ngInject */
    function shareBtwnCtrlrService() {
        shareBtwnCtrlr = function($scope, $rootScope){
            $scope.value = $rootScope.test;
        }
        return shareBtwnCtrlr;
    }
})();

在上面的代码中,$ rootScope.test来自一个控制器,现在我必须在另一个使用此服务的控制器中使用这个$ scope.value。另一个控制器如下所示

(function (){
    'use strict';

    angular.module('app.product')
        .controller('ProductController', ProductController);

    /** @ngInject */
    //ProductController.$inject = ['$http', '$location', '$scope'];
    function ProductController($http, $location, $rootScope, $scope, $localStorage, $interval, $timeout,$mdDialog, $document, shareBtwnCtrlr){
        var vm = this;  
     }
})();

2 个答案:

答案 0 :(得分:0)

您有两个模块,因此依赖注入器无法将您的服务从app.core注入app.product。 尝试创建新模块

var app = angular.module('app', ['app.core','app.product']); 

然后

angular.module('app').factory('shareBtwnCtrlr', shareBtwnCtrlrService);

答案 1 :(得分:0)

只能将同一模块中的服务注入模块的控制器和指令。

应该将新模块添加到应用程序中以扩展其功能。

angular.module('app.core')
 .factory('shareBtwnCtrlrService', function() {
    var shareBtwnCtrlrService = this;

    shareBtwnCtrlrService.value = function(){
        //do something
    }

    return shareBtwnCtrlrService;
 }
};

 angular.module('app.product')
 .factory('productService', function() {
    var productService = this;

    productService.value = function(){
        //do something
    }

    return productService;
 }
};

现在要在coreproduct模块中使用该服务,我们创建app模块,包括其中的

angular.module('app', ['app.product', 'app.core'])
 .controller('ProductController', ['shareBtwnCtrlrService', 'productService', function (shareBtwnCtrlrService, productService) {
     // ...do something
 }]);