web-dev-qa-db-ja.com

AngularJS / Jadeエラー:引数 'MyController'は関数ではなく、未定義になりました(MEAN)

この質問のバリエーションがすでに数回尋ねられていることは知っていますが、他のOPに対していくつかの提案された解決策を試しましたが、これを解決できませんでした。いくつかの説明をいただければ幸いです。

私は基本的な平均todoリストアプリ( http://www.mean.io/ )を使用しています。単純なコントローラーを実装した後、「エラー:引数 '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をスタンドアロン関数にしましたが、angularのドキュメントが言うようにコンストラクターとして宣言しています)

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')。controller( 'taskController'、function taskController($ scope){...}を試しましたが、同じ結果になりました。

ビューについてはOK:default.jadeにng-appが含まれています

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

私はthinkをしていませんangularディレクティブがなく、コントローラー自体が機能するはずなので、私はこれが基本的なアプリアーキテクチャの問題であり、物事がどのように組み合わされているのか理解できないと仮定します。助けていただければ幸いです。

9
Chris B.

このエラーは主に、angularjsがどのモジュールでもコントローラーを見つけられない場合に発生します。これは、誤ってモジュールを再定義した場合に発生する可能性があります。あなたの場合、私はそれを見る

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

その後

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

この構文は、モジュールを再定義します。

2番目のパラメーターなしでangular.module('mean')を使用して既存のモジュールを取得します。

30
Chandermani

私はちょうど今この問題を抱えていました。上記のすべての提案を試しましたが、何も機能しませんでした。次に、AngularJSをバージョン1.3.9-build.3746からバージョン1.2.8にダウングレードしました。それは私がベータ版を使用することで得られるものです。

1
Latin Warrior