Angular并未将全局功能识别为控制器

时间:2015-03-22 02:13:59

标签: angularjs angularjs-scope

使用Angular 1.3.x时,全局函数不会被识别为控制器。出了什么问题?我该如何纠正?

function MyController() {
  // etc
}
<div ng-controller="MyController"></div>

控制台显示以下错误:

  

错误:[ng:areq]   http://errors.angularjs.org/1.3.2/ng/areq?p0=MyController&p1=not%20a%20function%2C%20got%20undefined

2 个答案:

答案 0 :(得分:3)

根据the docs

  

如果当前的$ controllerProvider配置为使用全局变量(通过   $ controllerProvider.allowGlobals()),这也可能是一个名字   全局可访问的构造函数(不推荐)。

此更改已到达Angular 1.3.0-beta.15 (changelog)

这是Angular在旧版本中的行为更改,默认情况下会将全局函数识别为控制器。这是不好的做法,无论如何都不应该被使用。具有讽刺意味的是,为了使用它们,您无论如何都必须为您的应用程序使用正确的设置,并且无论如何都不想在那时使用它们。

因此,您需要以这种方式设置应用:ng-app="myAppng-controller="MyController"

angular.module('myApp', [])
.controller('MyController', function($scope) {
    $scope.author = {
      'name' : 'Mohammad Mohabati',
      'title' : 'Web Design',
      'company' : 'MohabatiPro'
    };
  })
;
然后可以使用

设置

allowGlobals

.config(function($controllerProvider) {
  $controllerProvider.allowGlobals();
});

以便ng-controller="SomeFunction"可以使用全局函数,如:

function SomeFunction($scope) { //etc

但不要这样做。 :)

答案 1 :(得分:0)

首先尝试启动您的模块 在你的HTML添加:

纳克应用内=&#39;对myApp&#39;

在你的脚本中添加: var app = angular.module(&#39; myApp&#39;,[]);