2013-07-03 15 views
19

Mam następujący kod;AngularJS Uncaught ReferenceError: kontroler nie jest zdefiniowany z modułu

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

otrzymuję następujący błąd

Uncaught ReferenceError: SomeControl is not defined from myApp 

Czy problem tylko, że nie mogę używać app.controller ('SomeControl', ...) składni? podczas korzystania z $ routeProvider? Składnia jest tylko praca:

function SomeControl(...) 
+2

duplikat: http://stackoverflow.com/questions/11211999/using-angular-controllers-created-with-angular-module-controller –

+0

Thanks @KarlZilles - Szukałem, ale brakowało ten. –

Odpowiedz

39

Stosować cytaty:

  controller: 'SomeControl' 
+2

DUH, Dzięki za odnalezienie mojego małego błędu;) –

+0

:) Łatwy błąd do zrobienia –

6

jak Foo L powiedział, trzeba umieścić w cudzysłowie SomeControl. Jeśli nie używasz cudzysłowów, odwołujesz się do zmiennej SomeControl, która jest niezdefiniowana, ponieważ nie użyłeś nazwanej funkcji do reprezentowania kontrolera.

Podczas korzystania z alternatywnego, o którym wspomniałeś, function SomeControl(...), definiujesz tę nazwaną funkcję. W przeciwnym razie Angular musi wiedzieć, że musi sprawdzić kontroler w module myApp.

Używanie składni app.controller('SomeControl', ...) jest lepsze, ponieważ nie zanieczyszcza globalnej przestrzeni nazw.

1

Powyższe odpowiedzi są poprawne, jednak ten błąd może się zdarzyć:

  1. Jeśli nazwa kontrolera w was html lub JSP itp strona nie jest dopasowanie rzeczywistej cotnroller

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

  1. Również jeśli nazwa kontrolera funkcji nie jest zgodna z definicją kontrolera, ten błąd może również wystąpić.

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

Powiązane problemy