使用使用angular.module()创建的AngularJS控制器.controller()

Noa*_*tas 44 angularjs

我仍然是AngularJS的新手,我正在设置我的第一个应用程序.我希望能够做到以下几点:

angular.module('App.controllers', [])
  .controller('home', function () {
    $scope.property = true;
  }]);

angular.module('App', ['App.controllers'])
  .config(['$routeProvider', function($routeProvider) {
    $routeProvider.when('/', {templateUrl: 'partials/home.html', controller: home});
  }]);
Run Code Online (Sandbox Code Playgroud)

使用此设置会生成以下错误:

Uncaught ReferenceError: home is not defined from App
Run Code Online (Sandbox Code Playgroud)

我的问题是:如何使用angular.module.controller()(或$controllerProvider.register()直接)注册控制器并在我的应用程序的其他地方使用注册的控制器.

我的动机:我想避免使用全局构造函数作为我的控制器(如使用angularjs.org时的大多数示例)或复杂的命名空间.如果我可以注册并使用控制器作为单个变量名称(不是那么放在全局范围内),那将是理想的.

And*_*lin 75

尝试使用字符串标识符.

routeProvider.when('/', {templateUrl: 'partials/home.html', controller: 'home'});

当您使用文字时,它正在寻找一个名为的变量home,但在这种情况下不存在.

  • 如果将控制器定义为函数(`函数PhoneListCtrl(){}`),则必须将其作为函数引用.如果使用.controller(`app.controller('PhoneListCtrl',function(){})`定义它,则应将其作为字符串引用. (24认同)
  • 使用在routeProvider上为我工作的字符串,但现在这不起作用:<div ng-controller ="MyCtrl"> </ div>.另一种形式 - <div class ="ng-controller ='MyCtrl'"> </ div>,但我更喜欢使用属性表单,因为它更简单.有办法吗? (3认同)