2013-11-01 34 views
8

我知道這個問題的變體已經被問過好幾次了,但是我已經嘗試了幾個針對其他OP的建議解決方案,能夠解決這個問題,並希望得到一些澄清。AngularJS/Jade錯誤:參數'MyController'不是一個函數,沒有定義(MEAN)

我正在使用基本的待辦事項列表應用程序(http://www.mean.io/)。在執行一個簡單的控制器後,我遇到了「Error:Argument'nameOfMyController'不是一個函數,沒有定義。」

下面是我在哪裏:

app.js(樣板)

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

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

我試圖修改怎麼在這裏引用一樣,例如,添加mean.controller到數組,但這顯然不是正確的做法,因爲它告訴我模塊不存在。

這裏是我taskController.js(平均教程我也跟着做taskController一個獨立的功能,但我聲明瞭它作爲一個構造函數的方式角的文檔說)

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; 
    }; 

}); 

我也試過angular.module( 'mean.system')控制器( 'taskController',功能taskController($範圍){...},相同的結果

確定現在的觀點:。包含在default.jade NG-應用

!!! 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 

然後在index.jade我:

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插入:

//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') 

我不認爲我失去了任何角度的指令和自身應該工作的控制器,所以我假設這是一個基本的應用程序架構問題,我不明白事情如何組合在一起。任何幫助,將不勝感激。

回答

30

此錯誤主要出現在angularjs無法在任何模塊中找到控制器時發生。當您不小心重新定義模塊時會發生這種情況。 在你的情況我看到

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

然後

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

此語法重新定義模塊。

獲取使用angular.module('mean')而沒有第二個參數的現有模塊。

+0

謝謝,我有兩個問題。你正確識別的是第一個。使用angular.module('mean').controller('taskController',函數taskController($ scope){...}並刪除模塊的第二個定義解決了函數undefined錯誤。我的index.jade中還有一個缺失的空格/標識(ng-repeat需要在ng-controller/ng-init聲明中)。解決這兩個問題都使一切正常工作。 –

+0

你剛剛救了我幾個小時的痛苦。非常感謝。 –

1

我剛纔有這個問題。我嘗試了上面的所有建議,但都沒有成功。然後,我將AngularJS從版本1.3.9-build.3746降級到版本1.2.8。這就是我使用測試版的原因。

相關問題