私は小さなチームで働いており、AngularJSを構築して、いくつかの基本的な標準とベストプラクティスを維持しようとしています。特に、Angularが比較的新しいことを考えると。
私の質問は、指令に関するものです。より正確には、restrict
オプション。
一部の人はrestrict: 'E'
を使用しているため、htmlに<my-directive></my-directive>
が含まれています。
他の人はrestrict: 'A'
を使用し、htmlに<div my-directive></div>
を持っています。
その後、もちろん、restrict: 'EA'
を使用して上記のいずれかを使用できます。
現時点では大したことではありませんが、このプロジェクトの規模が大きくなると、それを見ている人に何が起こっているのかを簡単に理解してもらいたいと思います。
物事の属性または要素の方法に賛否両論はありますか?
属性よりも要素を言う場合、知っておくべき落とし穴はありますか?
ドキュメント によると:
要素と属性のどちらを使用すべきか?テンプレートを制御するコンポーネントを作成するときに要素を使用します。これの一般的なケースは、テンプレートの一部にドメイン固有言語を作成する場合です。既存の要素を新しい機能で装飾するときに属性を使用します。
完全な答えを得るために落とし穴に関する以下のコメントを編集してください:
AngularJS 1.3からAngularJSチームによってサポートが削除されたInternet Explorer 8以上で実行するアプリを構築していると仮定すると、動作させるために次の指示に従う必要があります: https:/ /docs.angularjs.org/guide/ie
restrictは、ディレクティブのタイプを定義するためのものであり、A
name__(属性)、C
name__(クラス)、E
name__(要素)、およびM
name__(coMment)にすることができます。ディレクティブの名前をDoc
name__と仮定しましょう
タイプ:使用法
A =
<div Doc></div>
C =
<div class="Doc"></div>
E =
<Doc data="book_data"></Doc>
M =
<!--directive:Doc -->
IE8ではカスタム要素をサポートしていません。IE8がカスタムタグを受け入れるようにするための作業が必要です。
要素に対して属性を使用する利点の1つは、複数のディレクティブを同じDOMノードに適用できることです。これは、フォームコントロールなど、タグをまとめて要素をラップせずに追加の属性を持つラベルなどを強調表示、無効化、または追加できる場合に特に便利です。
私が知っている落とし穴の1つは、カスタム要素のIE問題です。 docs から引用したとおり:
3)しない(カスタム属性タグを代わりに使用する)などのカスタム要素タグを使用する
4)カスタム要素タグを使用する場合は、これらの手順を実行してIE 8以下を満足させる必要があります
<!doctype html>
<html xmlns:ng="http://angularjs.org" id="ng-app" ng-app="optionalModuleName">
<head>
<!--[if lte IE 8]>
<script>
document.createElement('ng-include');
document.createElement('ng-pluralize');
document.createElement('ng-view');
// Optionally these for CSS
document.createElement('ng:include');
document.createElement('ng:pluralize');
document.createElement('ng:view');
</script>
<![endif]-->
</head>
<body>
...
</body>
</html>
落とし穴:
<my-directive></my-directive>
のような独自のhtml要素を使用すると、回避策なしではIE8で動作しません( https://docs.angularjs.org/guide/ie )<div data-my-directive="ValueOfTheFirstParameter"></div>
これの代わりに:
<my-directive my-param="ValueOfTheFirstParameter"></my-directive>
私たちdontは、カスタムHTML要素を使用します。
サードパーティのフレームワークによるすべてのディレクティブは、2つの方法で記述できます。
<my-directive></my-directive>
または
<div data-my-directive></div>
同じことをします。
要素に関する2つの問題:
属性を使用します。