ホームページ >ウェブフロントエンド >jsチュートリアル >Angularjs
コアポイント
待って、それらの奇妙なng要素とひげ括弧は何ですか?一歩下がって、一歩一歩進んでみましょう。
<code class="language-html"><table> <tr ng-repeat="row in board.grid"> <td ng-repeat="cell in row"> {{ cell.marker }} </td> </tr> </table></code>
<tr ng-repeat="row in board.grid">angularjsコマンド<p></p> <h2> </h2>は、Angularjsの<p>>指令<code>ng-repeat
であり、提供されるHTML拡張機能の1つです。これにより、コレクションを反復し、各プロジェクトのテンプレートをインスタンス化できます。この例では、Angularjsにオブジェクトのプロパティで各行を繰り返すように指示します。board
が2次元配列であり、grid
がウィンドウ上のオブジェクトであると仮定します。<tr> <pre class="brush:php;toolbar:false"><code class="language-html"><table> <tr ng-repeat="row in board.grid"> <td ng-repeat="cell in row"> {{ cell.marker }} </td> </tr> </table></code></pre> <p>次に、別の<code>ng-repeat
ディレクティブを使用して、行のセルを反復します。ここでの二重ブレースは、AngularJS データバインディングを使用した式 -<td>の含有量が対応するセルの<code>marker
属性に置き換えることを示しています。これまでのところ、とても簡単ですよね?生成されたタグがどのように見えるかをすぐに理解できます。 jQueryなどのヘビー級ツールを使用して新しい要素を作成して記入する必要はありません。テンプレートを明確にする必要があります。これはメンテナンスが容易です。HTMLを見て、実際に書くことを覚えていない曖昧なJavaScriptコードを追跡せずにDOMがどのように変化するかを正確に知ることができます。
ボードの状態を視覚化できるようになりました。
board
の実際のコンテンツを定義することにより、データソースを提供します。<code class="language-html"><tr ng-repeat="row in board.grid"> <p>最初にJavaScriptコードを追加して、アプリケーションのAngularJSモジュールを定義します。最初のパラメーターはアプリケーションの名前であり、<code>['ng']</code>コアAngularJSサービスを提供するAngularJSの「NG」モジュールが必要です。 </p> <p> htmlを調整して、<code>ng-app</code>ディレクティブを使用すると、アプリケーションモジュールを使用するように指示します。 </p> <pre class="brush:php;toolbar:false"><code class="language-html"><td ng-repeat="cell in row"> {{ cell.marker }} </td></code>MVC-コントローラーとビューを定義します
AngularjsのMVC機能がここで登場します。 JSコードを追加して、新しく作成されたアプリケーションモジュールのコントローラー関数を呼び出し、コントローラーの名前とそれを実装する関数を渡します。
<code class="language-javascript">app = angular.module('ngOughts', ['ng'])</code>この場合、コントローラー関数はパラメーターを受け入れます。これは、コントローラーの
HTMLテンプレートに$scope
依存関係です。 AngularJSは、依存関係噴射を使用して、このサービスオブジェクトを提供し、関数パラメーターの名前から正しいオブジェクトを推測します(削除を可能にする代替構文もあります)。ディレクティブを追加して、コントローラーに接続します。
同じ、コントローラー名を持つプロパティと同じように単純です。ここで興味深いことが起こります - 私たちのボディタグの内側にネストされた要素は、ng-controller
<code class="language-html"><div ng-app="ngOughts">サービスオブジェクトにアクセスできるようになりました。その後、私たちの<p>プロパティは、<code>$scope</code>の範囲内で<code>ng-repeat</code>変数を探します。したがって、それを定義しましょう。 <code>BoardCtrl</code> <code>board</code>私たちは今、いくらかの進歩を遂げています。コントローラーに</p>を注入し、インスタンス化して、<pre class="brush:php;toolbar:false"><code class="language-javascript">app.controller "BoardCtrl", ($scope) -></code>の範囲内で利用できるようにします。
Board
先に進んで、シンプルなクラスを実装しましょう。BoardCtrl
Board
add Factory<code class="language-html"><div ng-controller="BoardCtrl"> <table> <tr ng-repeat="row in board.grid"> ... </tr> </table> </div></code>次に、
Factory
を定義できます。これは、 クラスのみを返し、コントローラーに注入することができます。 は工場関数内で直接定義することができ、ウィンドウオブジェクトに
Board
を配置することもできますが、ここで独立しておくことで、Angularjsとは独立してテストし、再利用性を促進することができます。だから今、私たちは空のチェスボードを持っています。エキサイティングなものですよね?セルをクリックするとマークが付けられるように設定しましょう。
<code class="language-html"><table> <tr ng-repeat="row in board.grid"> <td ng-repeat="cell in row"> {{ cell.marker }} </td> </tr> </table></code>各
<td>要素に<code>ng-click
ディレクティブを追加しました。テーブルセルをクリックすると、クリックされたセルオブジェクトを使用してboard
関数を呼び出します。 FillplayCell
実装:Board
<code class="language-html"><tr ng-repeat="row in board.grid"> <p>双方向のデータバインディング</p> <h2></h2> さて、ボードモデルを更新したので、ビューを更新する必要がありますよね? <p> </p>いいえ! AngularJSデータバインディングは<sulededirectional>です。モデルの変化を観察し、ビューに伝播します。同様に、ビューを更新すると、対応するモデルが更新されます。タグは<em>内部グリッドで更新され、これを反映するために</em>のコンテンツがすぐに変更されます。 <code>Board</code> <code><td>これにより、以前に記述しなければならなかった脆弱なセレクター依存のボイラープレートコードがたくさん排除されます。パイプラインではなく、アプリケーションロジックと動作に焦点を当てることができます。 <p>誰かが勝つことを知っていれば素晴らしいでしょう。実装しましょう。ここでは、勝利基準をチェックするコードを省略しますが、最終コードには存在します。勝者を見つけたら、勝者を構成する各セルに勝利属性を設定するとします。 </p> <p>その後、</p>を次のようなものに変更できます。 <p> <code><td> <suls>が本当なら、<pre class="brush:php;toolbar:false"><code class="language-html"><td ng-repeat="cell in row"> {{ cell.marker }} </td></code>は「勝利」CSSクラスを<code class="language-javascript">app = angular.module('ngOughts', ['ng'])</code>に適用します、私たちの勝利を祝うために楽しい緑の背景を設定しましょう。あなたは別のゲームを持っていると言いましたか?リセットボードボタンが必要です:
winning
ng-class
コントローラーに追加すると、ボタンがクリックされたら<td>に電話します。ボードマーカーがクリアされ、すべてのCSSクラスがクリアされ、再び開始する準備ができています - DOM要素を更新する必要はありません。 <pre class="brush:php;toolbar:false"><code class="language-html"><div ng-app="ngOughts">勝利を本当に披露しましょう:<p> <code>reset</code> </p> <p>コマンドを使用すると、ゲームが勝ったときに</p>要素を条件付きで表示できます。データバインディングにより、勝者のタグを挿入できます。シンプルで表現力豊かです。 <pre class="brush:php;toolbar:false"><code class="language-javascript">app.controller "BoardCtrl", ($scope) -></code></pre> <p><code>ng-show
組み合わせやすく、テストしやすくするために追加してください<h1></h1>
私たちのコードのほとんどがプレーン古いJavaScriptコードを扱っていることは注目に値します。これは意図的なものです - フレームワークオブジェクトを拡張するのではなく、JSコードを書き込んで呼び出すだけです。このアプローチは、組み合わせやすく、テストしやすいアプリケーションを作成するのに役立ちます。私たちの設計上の懸念はMVCによって分離されていますが、それらを接続するために多くのコードを書く必要はありません。
ただし、Angularjsには制限がないわけではありません。多くの人は、公式の文書と比較的急な学習曲線、SEOについて心配する人もいれば、標準以外のHTML属性と要素を使用することを嫌う人もいます。
しかし、これらの問題には解決策があり、AngularjsのWeb開発に対するユニークなアプローチは、間違いなく探求する価値があります。plunkrに対する最終コードの実際の効果を表示するか、Githubからダウンロードできます。
この記事のコメントは閉じられています。 Angularjsについて質問がありますか?フォーラムで質問してみませんか?AngularJSの指示とデータバインディングに関するFAQ
AngularJS指令とコンポーネントの違いは何ですか?AngularJSディレクティブとコンポーネントは、AngularJSフレームワークの強力な機能です。ディレクティブを使用すると、再利用可能なカスタムHTML要素とプロパティを作成できますが、コンポーネントはよりシンプルな構成を使用する特別なディレクティブです。コンポーネントは、コンポーネントベースのアプリケーション構造の構築に適しています。コンポーネントベースのアプリケーション構造は、今日のフロントエンド開発でより近代的で広く使用されています。ただし、命令はより柔軟であり、DOMを直接動作させることができますが、コンポーネントはできません。
AngularJSのデータバインディングは、モデルコンポーネントとビューコンポーネント間のデータの自動同期です。 AngularJSは、モデルをアプリケーションの単一の事実源として扱うことができるように、データバインディングを実装します。ビューは常にモデルの投影です。モデルが変更されると、ビューは変更を反映し、その逆も同様です。 一元配置データバインディングと双方向データバインディングの違いを説明できますか?
一元配置データバインディングは、モデルからビュー、またはモデルへのビューからのデータの単純なフローです。これは、モデルの状態が変更された場合、ビューが更新されないことを意味します。一方、双方向のデータバインディングとは、モデル状態が変更された場合、ビューが更新される場合(ユーザーの相互作用など)、モデル状態が更新されることを意味します。これにより、リアルタイム効果が可能になります。つまり、変更(ユーザー入力など)がモデル状態に直ちに反映されます。
関数を使用する必要があります。指令に名前を付けてから、すべてのディレクティブオプションを保存する工場関数を作成できます。工場関数は、依存関係(ある場合)を使用して注入され、指示オプションを定義するオブジェクトを返します。 AngularJSディレクティブの分離範囲により、指令の新しい範囲を作成できます。これは、指令範囲の変更が親の範囲に影響しないことを意味し、その逆も同様です。これは、再利用可能なモジュラーコンポーネントを作成する場合に非常に便利です。
AngularJS指令で転写を使用する方法は?
オプションをに設定することにより、
.directive
転写は、AngularJSの機能であり、カスタムコンテンツを命令に挿入できるようにします。ディレクティブ定義オブジェクトでディレクティブを使用して、ディレクティブテンプレートにカスタムコンテンツを挿入できます。
AngularJS指令のリンク関数は何ですか?
リンク関数は、AngularJSディレクティブに使用され、DOMを操作したり、イベントリスナーを追加したりします。テンプレートをクローニングした後に実行されます。この関数は通常、DOMイベントハンドラーの設定、モデルプロパティの変更の監視、DOMの更新などのタスクを実行するために使用されます。
angularjsディレクティブでコントローラー関数を使用する方法は?
コントローラー関数は、AngularJSスコープを強化するために使用されるJavaScriptコンストラクターです。コントローラーが
ng-controller
ディレクティブを介してDOMに接続されている場合、AngularJSは指定されたコントローラーのコンストラクターを使用して新しいコントローラーオブジェクトをインスタンス化します。新しいサブスコープが作成され、コンストラクターとして注入可能なパラメーターとしてコントローラーに提供されます$scope
。ディレクティブスコープオプションの「 "@"、 "="、および "&"の違いは何ですか?
これらのシンボルは、データを命令範囲にバインドするために使用されます。 「@」は文字列結合に使用され、 "="は双方向モデルの結合に使用され、「&」はメソッドバインディングに使用されます。それらはあなたがスコープを分離することを可能にし、あなたの指示をよりモジュール化し、再利用可能にします。
AngularJS指令をテストする方法は?
angularjsは、
ngMock
と呼ばれるモジュールを提供し、ユニットテストでAngularJSサービスを注入して模倣することができます。それを使用して指示をテストできます。また、ジャスミンやモカなどの他のテストフレームワークを使用して、テストを書き込んで実行することもできます。ngMock
以上がAngularjsの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。