当前位置: 首页 > 面试题库 >

使用AngularJS将服务注入控制器

颜啸
2023-03-14
问题内容

我已经用AngularJS编写了一个服务,但是我无法使其与角度种子处理方式一起使用。

控制器代码如下:

/*function PhotoCtrl($scope, Photo) {
    $scope.photos = Photo.query();
}*/

angular.module('myApp.controllers', []).
    controller('PhotoCtrl', [function($scope,Photo) {
    $scope.photos = Photo.query();
}])
.controller('MyCtrl2', [function() {

}]);

请注意,注释掉的部分工作正常,但我想像(推荐的)第二种方式来处理它。

我得到的错误是照片是未定义的,所以我的猜测是我传递(注入)它的方法是错误的,但是我找不到正确的方法


问题答案:

您需要定义Photo服务:

angular.module('myApp.controllers', [])
    .service('Photo', ['$log', function ($log) {

        return {
            query: function() {
                // the query code here.
            }
        };

    }])
    .controller('PhotoCtrl', ['$scope', 'Photo', function ($scope, Photo) {
        $scope.photos = Photo.query();
    }])
    .controller('MyCtrl2', [function() {

    }]);

一些参考:

  • http://docs.angularjs.org/api/angular.Module
  • http://docs.angularjs.org/api/AUTO.$provide#service

在上面的示例代码中,我使用了参数别名,建议这样做是为了避免在最小化代码时出现问题。

还有一个Plunker:http://plnkr.co/edit/Bzjruq



 类似资料:
  • 将服务用作控制器的依赖和将服务用作其他服务的依赖很类似。 因为Javascript是一种动态语言,依赖注入系统无法通过静态类型来知道应该注入什么样的服务(静态类型语言就可以)。所以,你应该$inject的属性来指定服务的名字,这个属性是一个包含这需要注入的服务的名字字符串的数组。名字要和服务注册到系统时的名字匹配。服务的名称的顺序也很重要:当执行工场函数时传递的参数是依照数组里的顺序的。但是工场函

  • 问题内容: 我写了一个AngularJS服务,我想对其进行单元测试。 我的app.js文件已注册: 我可以测试DI是否像这样工作: 这证明了可以通过DI框架创建服务,但是接下来我要对服务进行单元测试,这意味着要模拟注入的对象。 我该怎么做呢? 我试过将我的模拟对象放在模块中,例如 并将服务定义重写为: 但是后者似乎停止了DI所创建的所有服务。 有人知道我可以如何为单元测试模拟注入的服务吗? 谢谢

  • 问题内容: 我已经阅读了几篇有关angularjs实体正确用法的文章:服务,工厂,控制器和指令。 我特别关心的是控制器和服务的比较。但是,没有一个帖子告诉我什么是控制器可以执行服务不能执行的操作,反之亦然。 可以列出它吗?或者仅仅是在angular的用法上规范? 问题答案: 控制器 通常用于绑定视图。控制器管理视图的生命周期,应将其视为视图控制器。将为视图的每个实例创建一个新的控制器,这意味着,如

  • 问题内容: 是否可以在angularJS中将一个服务注入到另一个服务中? 问题答案: 是。遵循angularjs中的常规注入规则。 感谢@simon。最好使用数组注入以避免最小化问题。

  • 问题内容: authService.getLoggedin()返回false或true取决于用户是否登录。然后,我想不允许他们进入网址,如果不允许的话。 但是我收到此错误:错误:[$ injector:modulerr]由于以下原因无法实例化模块WikiApp:[$ injector:unpr]未知提供程序:authService 问题答案: 在配置阶段,您只能要求提供程序($ routeProv