AngularJS Uncaught ReferenceError:未从模块定义控制器

时间:2013-07-03 17:42:10

标签: angularjs angularjs-routing

我有以下代码;

var app =
    angular.
        module("myApp",[]).
        config(function($routeProvider, $locationProvider) {
            $routeProvider.when('/someplace', {
                templateUrl: 'sometemplate.html',
                controller: SomeControl
             });
             // configure html5 to get links working on jsfiddle
             $locationProvider.html5Mode(true);
        });

app.controller('SomeControl', ...);

我收到以下错误

Uncaught ReferenceError: SomeControl is not defined from myApp

问题只是因为我无法使用app.controller('SomeControl',...)语法?什么时候使用$ routeProvider?是唯一有效的语法:

function SomeControl(...)

3 个答案:

答案 0 :(得分:41)

使用引号:

            controller: 'SomeControl'

答案 1 :(得分:6)

就像Foo L所说,你需要在SomeControl附近加上引号。如果不使用引号,则表示变量SomeControl,这是未定义的,因为您没有使用命名函数来表示控制器。

当您使用您提到的替代方法function SomeControl(...)时,您可以定义该命名函数。否则,Angular需要知道它需要在myApp模块中查找控制器。

使用app.controller('SomeControl', ...)语法更好,因为它不会污染全局命名空间。

答案 2 :(得分:1)

上述答案是正确的,但也可能发生此错误:

  1. 如果您的html或jsp等页面中的控制器名称与实际的cotnroller不匹配
  2. <div ng-controller="yourControllerName as vm">

    1. 此外,如果功能控制器的名称与控制器定义不匹配,则也会发生此错误。
    2. angular.module('smart.admin.vip') .controller('yourController', yourController); function yourController($scope, gridSelections, gridCreationService, adminVipService) { var vm = this; activate();