web-dev-qa-db-ja.com

AngularJS Uncaught ReferenceError:コントローラーがモジュールから定義されていません

次のコードがあります。

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(...)
21
Joshua Wooward

引用符を使用:

            controller: 'SomeControl'
42
Foo L

Foo Lが言ったように、SomeControlを引用符で囲む必要があります。引用符を使用しない場合、変数SomeControlを参照しています。これは、コントローラーを表すために名前付き関数を使用しなかったため未定義です。

言及した代替function SomeControl(...)を使用する場合、その名前付き関数を定義します。そうでない場合、Angularは、myAppモジュールでコントローラーを検索する必要があることを知る必要があります。

app.controller('SomeControl', ...)構文を使用すると、グローバル名前空間を汚染しないため、より適切です。

7
Michael Younkin

上記の答えは正しいですが、このエラーも発生する可能性があります。

  1. Htmlまたはjspなどのページのコントローラーの名前が実際のcotnrollerと一致しない場合

_<div ng-controller="yourControllerName as vm">_

  1. また、関数コントローラーの名前がコントローラー定義と一致しない場合、このエラーも発生する可能性があります。

angular.module('smart.admin.vip') .controller('yourController', yourController); function yourController($scope, gridSelections, gridCreationService, adminVipService) { var vm = this; activate();

1
grepit