21

ng-app が次のように AngularJS でモジュールを初期化することを理解しています。

var app = angular.module('myApp', []);
<html ng-app="myApp">

しかし、私が AngularJS を初めて使う人にこれを教えたり、ビデオを見たりすると、アプリとモジュールの間の用語の不一致に講師が戸惑うことは避けられません。AngularJS はフレームワークとして非常によく考えられているため、次のように変更されていないことに驚いています。

var app = angular.app('myApp', []);
<html ng-app="myApp">

また

var app = angular.module('myModule', []);
<html ng-module="myModule">

フレームワークのこの部分の歴史を知るのに十分長くプロジェクトをフォローしている人はいますか?

4

3 に答える 3

13

Craig が何をするng-appか、どのように機能するかを尋ねているとは思いません。

彼は、角度のある名前を作成した人々がそのディレクティブを作成した理由を尋ねていると思いますng-app。なぜ彼らはそれに名前を付けなかったのですかng-moduleng-moduleより理解しやすいでしょう。

たとえばng-controller、コントローラーにng-module名前を付ける必要があり、モジュールに名前を付ける必要があります。それらangularを作成するメソッドにはmodule()andという名前が付いていますがcontroller()、「アプリ」と呼ばれるメソッドやエンティティはありません。

私はクレイグに同意する傾向があります。そうは言っても、なぜ彼らがそれを名付けたのかを推測すると、HTMLに1つのディレクティブng-appしか持てないからだと思います。ng-appHTML ページに複数のモジュールを関連付けたい場合は、プログラムで行うことができます。

HTMLng-appをモジュールでブートストラップするためのユーティリティであり、モジュールを HTML に関連付ける一般的な方法ではありません。

それが示唆するドキュメントを見ると:

このディレクティブを使用して、AngularJS アプリケーションを自動ブートストラップします。ngApp ディレクティブは、アプリケーションのルート要素を指定し、通常はページのルート要素の近く ( または タグなど) に配置されます。

HTML ドキュメントごとに自動ブートストラップできる AngularJS アプリケーションは 1 つだけです。ドキュメントで最初に見つかった ngApp は、アプリケーションとして自動ブートストラップするルート要素を定義するために使用されます。HTML ドキュメントで複数のアプリケーションを実行するには、代わりに angular.bootstrap を使用して手動でブートストラップする必要があります。AngularJS アプリケーションを相互にネストすることはできません。

http://docs.angularjs.org/api/ng/directive/ngApp

つまり、ディレクティブが必要な場合は、関数ng-moduleをラップするためにいつでも独自のディレクティブを作成できますangular.bootstrap()。これを行う方法の詳細とコードについては、私が書いたブログ投稿で見つけることができます: AngularJS: ngModule で ngApp の制限を回避する

于 2014-04-04T14:44:47.760 に答える
4

ng-appアプリケーションの初期化タスクを実行するアプリケーションのmainまたはモジュールを定義します。bootstrap実行時にアプリケーションのメイン モジュールを決定したい場合があります。Java と同様に、多くのメソッドとクラスがありますがmain、開始点として 1 つのメソッドを定義します。同様に、Angular には多くのモジュールがありますが、アプリケーションの開始点として 1 つのモジュールを定義します。

于 2013-11-12T17:31:04.200 に答える