2013-11-01 7 views
8

この質問のバリエーションは既に何度か尋ねられていますが、私は他のOPのいくつかの解決策を試したこれを解決することができ、いくつかの明確化を感謝するでしょう。AngularJS/Jadeエラー:引数 'MyController'が関数ではありません(平均)

私は基本的な平均todoリストアプリ(http://www.mean.io/)を使用しています。私は "Error:Argument 'nameOfMyController'が関数ではなく、定義されていません。例えば、配列にmean.controllerを追加し、同様に私は、ここで参照されているものの変更を試みた

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

しかし:私はでてるのはここ

ですモジュールが存在しないことがわかっているので、それは明らかに正しい方法ではありません。

はここにある私のtaskController.js

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((私はtaskControllerにスタンドアロン機能を作っ続くが、私はコンストラクタとしての角度のドキュメントは言う道にそれを宣言していた平均チュートリアル) 'mean.system')コントローラ( 'taskController'、関数taskController($の範囲){...}、同じ結果ビューの今OK

は: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')を使用して既存のモジュールを取得するには、2番目のパラメータを使用しないでください。

+0

ありがとう、私は2つの問題がありました。あなたが正しく特定したものが最初のものでした。コントローラの 'taskController'、function taskController($ scope){...}、モジュールの2番目の定義を削除すると関数undefined errorが解決されました。私はindex.jade(ng-controller/ng-init宣言の中でng-repeatが必要であった)にスペース/アイデンティフィケーションがありませんでした。両方の問題を修正すると、すべて正常に動作します。 –

+0

あなたは私に数時間の痛みを救っただけです。本当にありがとう。 –

1

今、この問題が発生しました。私は上記の提案をすべて試してみましたが、何も働かなかったのです。その後、AngularJSをバージョン1.3.9-build.3746からバージョン1.2.8にダウングレードしました。それが私がベータ版を使って得たものです。

関連する問題