无法在控制器中注入服务

时间:2016-10-16 14:54:41

标签: javascript angularjs angularjs-service

我正在使用requireJS作为我的angularjs应用程序。

common.service.js

define(function () {
    var coreModule = angular.module('coreModule');
    coreModule.config(['$provide', function ($provide) {
        $provide.factory("CommonService", CommonService);
    }]);
    CommonService.$inject = ["$http", "$q", "$window"];
    function CommonService($http, $q, $window) {
        var service = {};
        service.sharedValue;
        return service;
    }
});

page1.controller.js

define(function () {
    var coreModule = angular.module('coreModule');
    coreModule.controller('Page1Controller', ['$scope', "CommonService", function ($scope, CommonService) {
        // Q2: common service
        $scope.commonService = CommonService;    
    }]);
});

现在当我运行我的应用程序时,它会让我失误:

  

错误:[$ injector:unpr]未知提供者:CommonServiceProvider< - CommonService< - Page1Controller

任何输入?

2 个答案:

答案 0 :(得分:0)

您的核心模块应该注入空的依赖项

var coreModule = angular.module('coreModule',[]);

同样在第1页。控制器你不必再次声明模块,你可以使用

 angular.module('coreModule')
 .controller('Page1Controller', ['$scope', "CommonService", function ($scope, CommonService) {

答案 1 :(得分:0)

  1. 定义配置
  2. 定义服务
  3. 定义控制器,注入服务,在函数声明等中使用依赖关系。正如您所知,两者都是必需的,毕竟您需要这些句柄,否则注入的重点是什么。

  4. 定义模块,定义模块依赖关系。请注意,必须在控制器之前定义服务。如果您颠倒订单,您将收到错误,可能就是这里发生的事情。没有完整的代码,我无法分辨。

  5. bootstrap angular。

  6. 最后工作的是plunkr:http://plnkr.co/edit/CE9enkgW3KASx8pf5vdb?p=preview

        define('config',[],function(){
    
            function config($routeProvider) {
    
            $routeProvider.when('/home', {templateUrl: 'tpl.home.html', controller: 'HomeController'})
                .otherwise({redirectTo: '/home'});
    
            }
    
            config.$inject=['$routeProvider'];
    
            return config;
        });
    
    
        define('dataSvc',[], function(app){
    
            function factoryFunc ($q, $timeout){
    
            var svc = {getData: getData};
            return svc;
    
            function getData() {
            console.log('executing function');
              var d = $q.defer();
    
              $timeout(function(){
                console.log("firing timeout");
                d.resolve({name:"test", data:[1, 2, 3, 4]});  
              }, 750);
    
              return d.promise;
            }
    
              }  
    
            factoryFunc.$inject=['$q', '$timeout'];
    
            return factoryFunc;
    
        });
    
    
    
        define('HomeController',[], function() {
    
    
            function HomeController($scope, dataSvc) {
            $scope.name = "Mahesh";
    
            dataSvc.getData().then(function(result){
              $scope.data=result;
              console.log($scope.data);
            });
    
            }
    
            HomeController.$inject=['$scope','dataSvc'];
    
            return HomeController;
        });
    
    
    
        define('coreModule', ['config', 'dataSvc', 'HomeController']
              , function(config, dataSvc, HomeController){
              var app = angular.module('app', ['ngRoute','ngResource']);
              app.config(config);
              app.factory('dataSvc',dataSvc);
              app.controller('HomeController', HomeController);
        });
    
        require(['coreModule'],
            function() {
            angular.bootstrap(document, ['app']);
            }
        );
    
  7. 另请参阅,

    https://www.sitepoint.com/using-requirejs-angularjs-applications/

    http://beletsky.net/2013/11/using-angular-dot-js-with-require-dot-js.html