【问题标题】:Service injection into controller with AngularJS使用 AngularJS 将服务注入控制器
【发布时间】:2013-05-28 10:10:23
【问题描述】:

我在 AngularJS 中编写了一个服务,但我无法让它与 angular-seed 的处理方式一起工作。

控制器代码如下:

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

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

}]);

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

我得到的错误是照片是未定义的,所以我的猜测是我传递(注入)它的方法是错误的,但我不知道如何正确地做到这一点

【问题讨论】:

  • 据我所知,第一种方法很好,我相信例如官方教程中显示的。您是否有任何来源表明其他情况?
  • “注意:文档中的许多示例显示了在全局范围内创建函数。这仅用于演示目的.......”来自docs.angularjs.org/guide/dev_guide.mvc.understanding_controller 似乎是这样说的.不要误会,我认为第一个更容易阅读,但我知道名称间距可能更好
  • 如果您删除控制器函数定义[function($scope,Photo) {}] 周围的环绕方括号,您也可以,但如果您打算缩小代码,请不要这样做。更多关于dependencies injection in angular here
  • @Maarten 谢谢,我不知道这一点。我想我得重写我的应用程序了:)
  • @KGChristensen 很高兴为您提供帮助 ;-)

标签: angularjs


【解决方案1】:

你需要定义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() {

    }]);

几个参考:

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

另请参见此处的示例: AngularJS multiple uses of Controller and rootScope

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

【讨论】:

  • 我已经定义了服务,但是您的答案修复了它,因为您为控制器行提供了正确的语法,我不知道我必须像这样传递范围和照片,将其与我的例子来看看我的问题
  • 请注意,您还必须
  • 这不是factory 语法,不是service 语法吗? stackoverflow.com/questions/13762228/…(您的第三个编辑版本看起来像 service 语法。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-29
  • 2017-01-07
  • 2012-05-20
  • 2015-06-27
相关资源
最近更新 更多