AngularJSのベストプラクティス

このブロードキャストに基づいています。



序文の代わりに、フロントエンド開発(アセンブリ、CSSパラメーター化など)を自動化する最も一般的なテクノロジーを含むそのようなyeoman.io Webサイトがあると言います。 プロジェクトの作業の開始時に注意してください。



ディレクティブの使用



多くの開発者は、ディレクティブによってHTMLが乱雑になると考えています。また、古い習慣を変えることも困難です。 太古からHTMLにディレクティブが存在していたことは注目に値します。 これらはすべて、入力フィールド、ラジオボタン、ドロップダウンリストなどのよく知られたフォーム要素です。 別のことは、それらが「遅れる」ように作られていることです。 角度はこの問題を解決します。



通常のチェックボックスを比較する

<input type="checkbox" name="option1" value="a1" checked>
      
      





とAngularのチェックボックス

 <input type="checkbox" ng-model="myModel">
      
      





どちらが簡単ですか? ディレクティブは名前でバインドされていないため、 name/id/class



は省略できます。 初期状態はモデルによって設定されるため、 checked



は意味がありません。 しかし、それだけではありません。 最後のコードは書き直すことができます

 <input type="checkbox" ng-model="myModel" ng-true-value="on" ng-false-value="off" ng-change="change()">
      
      





HTMLに精通し始めた多くの人々は、なぜ標準バージョンにそのようなものがなかったのか、チェックボックスがon



または無効になり、 true



およびfalse



ではなく、なぜon



値のみを変更できるのか、その他の多くの理由が当惑したと思います。



そのため、Angularは、既存のインタラクティブな要素を理解可能な方法で実行する必要があるだけで、要素とこのモデルとの接続を統一し、これに基づいて、HTML5、HTML6、またはHTML8の到着を待たずに、あらゆる種類のカスタムコントロールを作成できます。



次に、HTMLに類似物がないディレクティブを検討します。

 <ANY ng-repeat="book in books">
      
      





タグでのロジックの使用について。 実際、これは完全に真実ではありません。 メインロジックは、はるかに複雑であり、ディレクティブを記述するスクリプトにパッケージ化されています。 インタラクションインターフェイスのみが属性にレンダリングされます。 Angularの開発者は、マークアップがページ上にあるWHAT要素についてだけでなく、彼らが行うことについても話すべきであると信じています(そしてそれらに反対することは困難です)。 そして、彼らがそれを行う方法の説明は、スクリプトの多くです。



もちろん、複雑なロジックをディレクティブに詰め込むこともできます。 一般に、一連の標準ディレクティブからほとんどすべての動作を編成できます。 これは正当化される場合があります。特に、何かをすばやく行う必要がある場合は、Angularはこのアプローチを100%支持しません。



ディレクティブはいくつかの方法で作成できることを誰もがすでに知っています。

 <my-dir></my-dir> <span my-dir="exp"></span> <span class="my-dir: exp;"></span> <!-- directive: my-dir exp -->
      
      





したがって、最も好ましい(イデオロギーに近い)最初の方法。 場合によっては(たとえば、ng-repeatのようなディレクティブの場合、または心理的を含む互換性の場合)-2番目。 3番目はまさにそのように作成されます。 4番目は、 <tr>



<td>



以外のものを配置するなど、HTMLの制限を回避するために必要です。 また、古いブラウザとの互換性を高めるために、ディレクティブ名を接頭辞(my-など)で開始することをお勧めします。 バリデーターの場合、x-またはdata-プレフィックスを名前に追加できます(Angularによって破棄されます)。



アウトブレイク制御



言い換えれば、ユーザーにとってページの読み込みをよりスムーズにする方法です。



まず、Angularスクリプトをページの最後に配置して、ロード中にユーザーが白い画面を見ないようにします。



次に、Angularによって完全に処理されるまでテンプレートを隠すng-cloak



ディレクティブに注意してください。また、中括弧{{ }}



式の代わりにng-bind



使用します。



実際、ほとんどの単純な場合、ちらつきの問題は発生しません。



コントローラーとサービスの違い



コントローラーは、ビューの動作、つまり Xボタンをクリックするどうなるか、Xデータをどこで操作するかという質問に答えてください 。 アプリケーションのタイプごとに個別のコントローラーインスタンスが作成されます。 コントローラーでは、DOMを操作することはありません。 DOMの操作は、ディレクティブでのみ行われます。



サービスには基本的なロジックが含まれており、Xが何をどのように行うという質問に答えます。 コントローラとは異なり、サービスはシングルトーンです。つまり、アプリケーション全体に存在できるサービスインスタンスは1つだけです。 また、DOMで動作するべきではありませんが、たとえば、グローバルダイアログボックスを作成する必要がある場合など、場合によっては可能です。いずれにしても、サービスでのDOM操作の使用を制限する必要があります。



ゴブノコッドの劣化



上記から、govnokodと戦うための戦略を決定できます。 実験中、かき回しなど。 単純なロジックはHTMLで直接記述できますが、より複雑になるため、個別のディレクティブとコントローラーに転送する必要があります。 さらに、すべての非プレゼンテーションロジックがサービスに送信されます。 一種のローカルリファクタリングが判明しました。



範囲



スコープは、ビューをコントローラーに接続します。 テンプレート(ビュー)の読み取りと、 コントローラーへの書き込みのみを目的としています



スコープとモデルを混同しないでください。 スコープはモデルへの参照です。 したがって、モデルパラメーターをスコープに直接書き込むことは正しくありません。 1つのパラメーターを作成し、そこにモデルを配置する必要があります。

 // $scope.param1 = 'hello'; $scope.param2 = 'world'; // $scope.model = { param1: 'hello', param2: 'world' };
      
      





これらのアプローチの違いは、このビデオと最初ので明確に示されています(コードのコメントを参照)。



したがって、ディレクティブでのモデルの呼び出しはほとんどの場合次のように : , - .





, .. , . . . .



, , , ( ). , .







- GZIP- ( ) index.html, .. , , . ( ): , , , CSS.

( ), . .



, :

, , ( , {{ }} ). .

$watch



{{ }}



. , , , .



ng-view



ng-include



DOM- , , ng-show



ng-hide



. ng-repeat



, . ., , . , . . , , , . , . ng-repeat



. .



DOM ng-include



innerHTML



, . . .





, - , , . API , .








: , - .





, .. , . . . .



, , , ( ). , .







- GZIP- ( ) index.html, .. , , . ( ): , , , CSS.

( ), . .



, :

, , ( , {{ }} ). .

$watch



{{ }}



. , , , .



ng-view



ng-include



DOM- , , ng-show



ng-hide



. ng-repeat



, . ., , . , . . , , , . , . ng-repeat



. .



DOM ng-include



innerHTML



, . . .





, - , , . API , .








: , - .





, .. , . . . .



, , , ( ). , .







- GZIP- ( ) index.html, .. , , . ( ): , , , CSS.

( ), . .



, :

, , ( , {{ }} ). .

$watch



{{ }}



. , , , .



ng-view



ng-include



DOM- , , ng-show



ng-hide



. ng-repeat



, . ., , . , . . , , , . , . ng-repeat



. .



DOM ng-include



innerHTML



, . . .





, - , , . API , .








: , - .





, .. , . . . .



, , , ( ). , .







- GZIP- ( ) index.html, .. , , . ( ): , , , CSS.

( ), . .



, :

, , ( , {{ }} ). .

$watch



{{ }}



. , , , .



ng-view



ng-include



DOM- , , ng-show



ng-hide



. ng-repeat



, . ., , . , . . , , , . , . ng-repeat



. .



DOM ng-include



innerHTML



, . . .





, - , , . API , .








: , - .





, .. , . . . .



, , , ( ). , .







- GZIP- ( ) index.html, .. , , . ( ): , , , CSS.

( ), . .



, :

, , ( , {{ }} ). .

$watch



{{ }}



. , , , .



ng-view



ng-include



DOM- , , ng-show



ng-hide



. ng-repeat



, . ., , . , . . , , , . , . ng-repeat



. .



DOM ng-include



innerHTML



, . . .





, - , , . API , .








: , - .





, .. , . . . .



, , , ( ). , .







- GZIP- ( ) index.html, .. , , . ( ): , , , CSS.

( ), . .



, :

, , ( , {{ }} ). .

$watch



{{ }}



. , , , .



ng-view



ng-include



DOM- , , ng-show



ng-hide



. ng-repeat



, . ., , . , . . , , , . , . ng-repeat



. .



DOM ng-include



innerHTML



, . . .





, - , , . API , .








: , - .





, .. , . . . .



, , , ( ). , .







- GZIP- ( ) index.html, .. , , . ( ): , , , CSS.

( ), . .



, :

, , ( , {{ }} ). .

$watch



{{ }}



. , , , .



ng-view



ng-include



DOM- , , ng-show



ng-hide



. ng-repeat



, . ., , . , . . , , , . , . ng-repeat



. .



DOM ng-include



innerHTML



, . . .





, - , , . API , .








: , - .





, .. , . . . .



, , , ( ). , .







- GZIP- ( ) index.html, .. , , . ( ): , , , CSS.

( ), . .



, :

, , ( , {{ }} ). .

$watch



{{ }}



. , , , .



ng-view



ng-include



DOM- , , ng-show



ng-hide



. ng-repeat



, . ., , . , . . , , , . , . ng-repeat



. .



DOM ng-include



innerHTML



, . . .





, - , , . API , .








: , - .





, .. , . . . .



, , , ( ). , .







- GZIP- ( ) index.html, .. , , . ( ): , , , CSS.

( ), . .



, :

, , ( , {{ }}




). .

$watch



{{ }}



. , , , .



ng-view



ng-include



DOM- , , ng-show



ng-hide



. ng-repeat



, . ., , . , . . , , , . , . ng-repeat



. .



DOM ng-include



innerHTML



, . . .





, - , , . API , .




: , - .





, .. , . . . .



, , , ( ). , .







- GZIP- ( ) index.html, .. , , . ( ): , , , CSS.

( ), . .



, :

, , ( , {{ }}




). .

$watch



{{ }}



. , , , .



ng-view



ng-include



DOM- , , ng-show



ng-hide



. ng-repeat



, . ., , . , . . , , , . , . ng-repeat



. .



DOM ng-include



innerHTML



, . . .





, - , , . API , .




: , - .





, .. , . . . .



, , , ( ). , .







- GZIP- ( ) index.html, .. , , . ( ): , , , CSS.

( ), . .



, :

, , ( , {{ }}




). .

$watch



{{ }}



. , , , .



ng-view



ng-include



DOM- , , ng-show



ng-hide



. ng-repeat



, . ., , . , . . , , , . , . ng-repeat



. .



DOM ng-include



innerHTML



, . . .





, - , , . API , .







All Articles