1

私は Angular.js を初めて使用し、ベスト プラクティスに従い、ビジネス ロジックとプレゼンテーション ロジックを分離するために、ロジックのさまざまな部分を配置する場所を理解しようとしています。

私の具体的な使用例は、多数のサインアップと多数の空席があるコースのリストを持っていることです。これらの値に基づいて、プログレス バーを表示します (または、利用可能な座席が設定されていない場合は、テキストのみ)。

私の質問は、ロジックのさまざまな部分をどこに置くか、そして値を適切に渡す方法です。これまでのところ、次のように、ディレクティブの HTML 部分を作成しました。

<signupprogress available="{{course.available_seats}}" filled="{{course.filled_seats}}"></signupprogress>

私の質問は、(何よりもまず)ディレクティブがこれを行う適切な方法であるかどうか、そしてプログレスバーを構築するためのロジックがコンパイル関数、リンク関数、テンプレート、または他の場所に入る必要があるかどうかです. 私にはリンク関数のコンパイルが最も正しいように思えますが、それらを HTML で埋めたくないし、HTML から属性値を適切に取得することもできません (私が見た attrs.$observe の例のみ1 つの属性の取得を実装します)。

4

2 に答える 2

1

はい、DOMを変更する必要があるため、ディレクティブを使用します。

プログレスバーのすべてのHTMLと代替テキストをディレクティブのテンプレートに配置できる場合は、それを実行します。また、それが可能な場合は、一方向バインディングに「@」を使用します。これにより、ディレクティブが「available」および「filled」値を変更する必要がないことが明確になります。リンク関数が必要な場合は、@ ShaiRezが述べたように、「=」の方がおそらく簡単です。(ところで、これは$observeを使用する代わりに複数の属性を$watchする方法です。たぶん同じテクニックを$observeに使用することができます。)

テンプレートにプログレスバーまたは代替テキストを表示するには、テンプレートでng-hideまたはng-showを使用します。これはその簡単な例です(これも「@」を使用します)。

于 2013-02-02T19:52:00.957 に答える
1

ディレクティブは私の意見では進むべき道です。テンプレート内に HTML コンテンツを配置し、リンク関数内にロジックを配置します (コンパイル関数は通常、リピーター向けなどです)。そして、ディレクティブ定義で「スコープ」プロパティを使用し、「=」に設定すると、変更が自動的に反映されます。

于 2013-02-02T13:49:38.100 に答える