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