web-dev-qa-db-ja.com

別のモジュールの子コントローラーを使用する

モジュールを定義し、ng-appディレクティブを使用してアプリのメインモジュールにしました。私はangular.module( 'myApp')。controller()を使用してメインアプリに2つのコントローラーを追加しました。これらのコントローラーの1つはページ全体のスコープを持っていますが、もう1つのコントローラーは子コントローラーです。

私が今やろうとしているのは、別のモジュール(メインのmyAppモジュールではない)に属するコントローラーを含めることですが、それを理解することはできません。コントローラの名前空間をグローバルに作成したくありません。

誰もがこれを行う方法を知っていますか?

これが私がこれまでに持っているものです:

<!doctype html>
<html lang="en" data-ng-app='myApp' data-ng-controller='myApp.mainController'>
<head>
  <meta charset="utf-8">
  <title>Untitled</title>
  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
  <script>
    $(function() {
      var app, module;

      //create two modules, one of which will be used for the app base
      app = angular.module('myApp', []);
      module = angular.module('otherModule', []);

      //create main controller for main app
      app.controller('myApp.mainController', function($scope) {
        $scope.content = 'App main controller content';
      });

      //create child controller for main app
      app.controller('myApp.subController', function($scope) {
        $scope.content = 'App sub controller content';
      });

      //create a controller for the other module
      module.controller('othermodule.controller', function($scope) {
        $scope.content = 'Other module controller content';
      });
    });


  </script>
</head>
<body>

  <!-- output content from main controller from main module: myApp -->
  {{content}}

  <!-- specify use of main module's child controller and output its content -->
  <div data-ng-controller='myApp.subController'>
    {{content}}
  </div>

  <!-- NOT WORKING - ideally should output content from the other module's controller -->
  <div data-ng-controller='othermodule.controller'>
    {{content}}
  </div>

  <!-- load angular library -->
  <script src="lib/angular/angular.js"></script>
</body>
</html>

このコードは、本質的にothermodule.controllerコントローラーが見つからなかったことを示すJavaScriptエラーで次のように出力します。

アプリのメインコントローラーのコンテンツ

アプリサブコントローラーの内容

{{コンテンツ}}

正確なエラー:

> Error: Argument 'othermodule.controller' is not a function, got
> undefined
> assertArg@http://localhost/sandbox/angular/apptemplate/lib/angular/angular.js:1005
> assertArgFn@http://localhost/sandbox/angular/apptemplate/lib/angular/angular.js:1016
> @http://localhost/sandbox/angular/apptemplate/lib/angular/angular.js:4740
> applyDirectivesToNode/nodeLinkFn/<@http://localhost/sandbox/angular/apptemplate/lib/angular/angular.js:4322
> forEach@http://localhost/sandbox/angular/apptemplate/lib/angular/angular.js:140
> nodeLinkFn@http://localhost/sandbox/angular/apptemplate/lib/angular/angular.js:4307
> compositeLinkFn@http://localhost/sandbox/angular/apptemplate/lib/angular/angular.js:3953
> compositeLinkFn@http://localhost/sandbox/angular/apptemplate/lib/angular/angular.js:3956
> nodeLinkFn@http://localhost/sandbox/angular/apptemplate/lib/angular/angular.js:4338
> compositeLinkFn@http://localhost/sandbox/angular/apptemplate/lib/angular/angular.js:3953
> publicLinkFn@http://localhost/sandbox/angular/apptemplate/lib/angular/angular.js:3858
> bootstrap/</<@http://localhost/sandbox/angular/apptemplate/lib/angular/angular.js:964
> Scope.prototype.$eval@http://localhost/sandbox/angular/apptemplate/lib/angular/angular.js:7993
> Scope.prototype.$apply@http://localhost/sandbox/angular/apptemplate/lib/angular/angular.js:8073
> bootstrap/<@http://localhost/sandbox/angular/apptemplate/lib/angular/angular.js:962
> invoke@http://localhost/sandbox/angular/apptemplate/lib/angular/angular.js:2843
> bootstrap@http://localhost/sandbox/angular/apptemplate/lib/angular/angular.js:961
> angularInit@http://localhost/sandbox/angular/apptemplate/lib/angular/angular.js:936
> @http://localhost/sandbox/angular/apptemplate/lib/angular/angular.js:14729
> b.Callbacks/c@http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js:3
> b.Callbacks/p.fireWith@http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js:3
> .ready@http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js:3
> H@http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js:3
> 
> http://localhost/sandbox/angular/apptemplate/lib/angular/angular.js
> Line 5687
15
James

現在行っていることは、2つのモジュールappmoduleを「宣言」したことです。

angular bootstrapsの場合、bootstrap with app。で、アプリケーションはappでブートストラップしますが、 appは、他のモジュール(module!)への参照を持っていません。

したがって、アプリケーションをappでbootstrapし、moduleまたはbootstrapアプリケーション)への依存関係を指定する必要があります。まったく新しいモジュールを使用して、appmoduleへの依存関係を指定します。

これは、依存関係を定義する方法です

angular.module('app',['module']);

まったく新しいモジュールを作成し、両方を依存関係として指定する場合

angular.module('myApp',['app','module'])

注:まったく新しいモジュールを作成する場合は、この新しいモジュールを使用してbootstrap your angularアプリケーションを作成する必要があります。

<html ng-app="myApp"...
22
ganaraj