从主控制器访问模块子模块服务

时间:2015-09-01 16:56:16

标签: javascript angularjs

我将此模块作为我的主应用程序使用api

var app = angular.module('app.main', ['api']);

app.controller('Home', function($scope, api, search){
    $scope.search = function(){
        api.search.lookup($scope.domain);
        search.lookup($scope.domain);
    };
});

然后我api使用了其他一些模块:

var app = angular.module('api', [
    'api.search'
    // other modules here
]);

app.service('api', function($cookies, $http, $rootScope, search){
    // Some more code
});

搜索搜索module如下所示:

var app = angular.module('api.search', []);

app.service('search', function($scope, $http){
    this.lookup = function(domain){
        // query
    };
});

当我运行我的控制器并注入api时,我无法访问search,因为我得到TypeError: Cannot read property 'lookup' of undefined,如果我注入search,我会收到此错误:

Error: [$injector:unpr] http://errors.angularjs.org/1.4.3/$injector/unpr?p0=<div ng-view="" class="ng-scope" data-ng-animate="1">copeProvider%20%3C-%20%24scope%20%3C-%search

那么,如何从我的控制器访问搜索?

1 个答案:

答案 0 :(得分:1)

看起来问题是,您正试图将$scope注入服务生成函数。

$scope是一个仅适用于控制器的本地注入,这是有道理的,因为范围是定义控制器的上下文,对单例服务没有意义。

相反,如果需要,您可以将$rootScope注入服务。

app.service('search', function($rootScope, $http){
  // ...
});