路由提供程序如何将依赖项传递给控制器

时间:2015-09-08 17:00:20

标签: angularjs

如果我有以下angularjs代码路由提供程序,我怎么能通过依赖进入blaCtrl控制器呢?

非常感谢,

app.config(['$routeProvider', function($routeProvider) {
$routeProvider.when('/bla', { templateUrl: 'bla.html', controller: 'blaCtrl' });

试图获得类似

的内容
'use strict';
app.controller('blaCtrl', function ($scope) {

    $scope.mydata = ['111', '222', '333'];  // how can I change this to be a method call to a dependency, i.e.
    $scope.mydata = mydependency.getData();  // example what I need

});

更新

我的app文件看起来像这样 - 我还没有显示数据?

'use strict';
var app = angular.module('myApp', ['ngRoute']);

app.config(['$routeProvider', function($routeProvider) {    
  $routeProvider.when('/application', { templateUrl: 'partials/application.html', controller: 'myCtrl' });
  $routeProvider.otherwise({ redirectTo: '/application' });
}]);

控制器

'use strict';

app.controller('myCtrl', 'myService', function ($scope, myService) {
    debugger;  // doesn't get hit?
    $scope.stuff = myService.getStuff();
});

控制台错误

  - I get this error in the console Error: [ng:areq] http://errors.angularjs.org/1.4.5/ng/areq?p0=applicationCtrl&p1=not%20a%20function%2C%20got%20string

2 个答案:

答案 0 :(得分:1)

根据angular docs,有3种依赖注释方式。

内联数组注释

在这种情况下,您的控制器防御应该如下所示:

'use strict';
app.controller('blaCtrl', ['$scope', 'mydependency', function ($scope, mydependency) {
    $scope.mydata = mydependency.getData();
}]);

$ inject属性注释

'use strict';
var blaCtrl = function ($scope, mydependency) {
    $scope.mydata = mydependency.getData();
};
blaCtrl.$inject = ['$scope', 'mydependency'];
app.controller('blaCtrl', blaCtrl);

隐式注释

您在示例代码中使用的这个注入$scope变量。不推荐,minificattion会破坏这样的代码。

'use strict';
app.controller('blaCtrl', function ($scope, mydependency) {
    $scope.mydata = mydependency.getData();
});

你引用你的控制器不是用HTML而是在routeProvider中的事实并没有任何区别。

答案 1 :(得分:0)

您可以从控制器内向控制器传递依赖关系。您已经注入了$ scope依赖项,如果您愿意,可以注入其他内容,例如$ location和$ rootScope。