2013-11-01 4 views
8

Ich weiß Variationen dieser Frage wurden schon mehrmals gefragt, aber ich habe mehrere vorgeschlagene Lösungen für andere OPs ausprobiert, nicht war in der Lage, dies zu lösen, und würde eine Klarstellung schätzen.AngularJS/Jade Fehler: Argument 'MyController' ist keine Funktion, undefined (MEAN)

Ich arbeite mit der grundlegenden mittleren Todo-Liste App (http://www.mean.io/). Nach dem Implementieren eines einfachen Controllers bin ich in der "Error: Argument 'NameOfMyController' ist keine Funktion, wurde undefiniert."

Hier ist, wo ich bin an:

app.js (vorformulierten)

window.app = angular.module('mean', ['ngCookies', 'ngResource', 'ui.bootstrap', 'ui.route', 'mean.system', 'mean.articles' ]); 

angular.module('mean.system', []); 
angular.module('mean.articles', []); 

Ich habe versucht, zu modifizieren, was hier Bezug genommen ist, wie zum Beispiel das Hinzufügen mean.controller auf das Array aber Das ist eindeutig nicht der richtige Weg, weil es mir sagt, dass das Modul nicht existiert.

hier ist mein taskController.js (ein Mittelwert Tutorial I taskController eine eigenständige Funktion gemacht verfolgt wird, aber ich bin es als Konstrukteur erklärt die Art und Weise docs Winkel sagen zu)

var mean = angular.module('mean',[]); 

mean.controller('taskController', function taskController($scope){ 

    $scope.todos = []; 

    $scope.doneFilter = { done : true }; 
    $scope.notDoneFilter = { done : false }; 

    $scope.setTodos = function(todos){ 
     $scope.todos = todos; 
    }; 

}); 

ich auch versucht angular.module ('mean.system') Controller ('taskController', function taskController ($ scope) {...}, das gleiche Resultat

ok jetzt den Ansichten:.. enthalten ng-App in default.jade

!!! 5 
    html(ng-app='mean', lang='en', xmlns='http://www.w3.org/1999/xhtml', xmlns:fb='https://www.facebook.com/2008/fbml', itemscope='itemscope', itemtype='http://schema.org/Product') 
    include ../includes/head 
    body 
    ... 
    include ../includes/foot 

dann in index.jade ich habe:

extends layouts/default 

block head 
    script(type='text/javascript', src='/js/controllers/taskController.js') 

block content 
    section(data-ng-view) 
    div.container(ng-controller="taskController", ng-init="setTodos(#{JSON.stringify(todos)})") 
    ... 
    div.row(ng-repeat="todo in todos | filter:notDoneFilter") 
    label.checkbox 
     input(type="checkbox", ng-model="todo.done") 
     | {{ todo.description }} 
    span.datestring 
     i {{ todo.due | date: 'MMM d, yyyy' }}  
    ... 
    div.row(ng-repeat="todo in todos | filter:doneFilter") 
    label.checkbox 
     input(type="checkbox", checked="true") 
     del {{ todo.description }} 
     span.datestring 
     i {{ todo.due | date: 'MMM d, yyyy' }} 

foot.jade Einsätze:

//AngularJS 
script(type='text/javascript', src='/lib/angular/angular.js') 
script(type='text/javascript', src='/lib/angular-cookies/angular-cookies.js') 
script(type='text/javascript', src='/lib/angular-resource/angular-resource.js') 

ich glaube nicht ich keine Winkel Richtlinien bin fehlt und die Steuerung selbst funktionieren sollte, so Ich gehe davon aus, dass dies ein grundlegendes Problem der App-Architektur ist, bei dem ich nicht verstehe, wie die Dinge zusammenpassen. Jede Hilfe wäre willkommen.

Antwort

30

Dieser Fehler tritt meistens auf, wenn angularjs den Controller in keinem Modul finden kann. Dies kann passieren, wenn Sie das Modul versehentlich neu definieren. In Ihrem Fall sehe ich, dass

window.app = angular.module('mean', ['ngCookies', 'ngResource', 'ui.bootstrap', 'ui.route', 'mean.system', 'mean.articles' ]);

und dann

var mean = angular.module('mean',[]);

Diese Syntax das Modul neu zu definieren.

Um das vorhandene Modul mit angular.module('mean') ohne den zweiten Parameter zu erhalten.

+0

Danke, ich hatte zwei Probleme. Derjenige, den Sie richtig identifiziert haben, war der erste. Die Verwendung von angular.module ('mean'). Controller ('taskController', die Funktion taskController ($ scope) {...} und das Entfernen meiner zweiten Definition des Moduls löste die Funktion undefined error.Ich hatte auch einen fehlenden Abstand/eine fehlende Übereinstimmung in meinem index.jade (ng-repeat musste innerhalb der ng-controller/ng-init Deklaration sein). Beides hat alles richtig funktioniert. –

+0

Sie haben mich gerade Stunden des Schmerzes gerettet. Vielen Dank. –

1

Ich hatte gerade dieses Problem jetzt. Ich habe alle obigen Vorschläge ausprobiert und nichts hat funktioniert. Dann habe ich AngularJS von Version 1.3.9-build.3746 auf Version 1.2.8 heruntergestuft. Das ist, was ich für die Verwendung von Beta-Versionen bekomme.