web-dev-qa-db-fra.com

AngularJS Uncaught ReferenceError: le contrôleur n'est pas défini à partir du module

J'ai le code suivant;

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', ...);

J'obtiens l'erreur suivante

Uncaught ReferenceError: SomeControl is not defined from myApp

Le problème vient-il du fait que je ne peux pas utiliser la syntaxe app.controller ('SomeControl', ...)? lors de l'utilisation de $ routeProvider? est la seule syntaxe de travail:

function SomeControl(...)
21
Joshua Wooward

Utilisez des guillemets:

            controller: 'SomeControl'
42
Foo L

Comme l'a dit Foo L, vous devez mettre des guillemets autour de SomeControl. Si vous n'utilisez pas de guillemets, vous faites référence à la variable SomeControl, qui n'est pas définie car vous n'avez pas utilisé de fonction nommée pour représenter le contrôleur.

Lorsque vous utilisez l'alternative que vous avez mentionnée, function SomeControl(...), vous définissez cette fonction nommée. Sinon, Angular doit savoir qu'il doit rechercher le contrôleur dans le module myApp.

Il est préférable d'utiliser la syntaxe app.controller('SomeControl', ...) car elle ne pollue pas l'espace de noms global.

7
Michael Younkin

Les réponses ci-dessus sont correctes cependant, cette erreur peut également se produire:

  1. Si le nom du contrôleur dans votre page html ou jsp, etc. ne correspond pas au cotnroller réel

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

  1. De plus, si le nom du contrôleur de fonction ne correspond pas à la définition du contrôleur, cette erreur peut également se produire.

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

1
grepit