質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%

Q&A

2回答

1371閲覧

NgFormの@Directiveのselectorの記述が理解できない

miiikun

総合スコア39

0グッド

0クリップ

投稿2017/07/17 10:32

@Directive({ selector: 'form:not([ngNoForm]):not([ngFormModel]),ngForm,[ngForm]', bindings: [formDirectiveProvider], host: { '(submit)': 'onSubmit()', }, outputs: ['ngSubmit'], exportAs: 'ngForm' })

上記はNgFormの@Directiveの記述です。
上から二行目selector: 'form:not([ngNoForm]):not([ngFormModel]),ngForm,[ngForm]'
が理解できません。これによって実現できていることは知っています。
しかし、文法が分かりません。
例えば:not([ngNoForm])は、どういう意味ですか。ngNoFormという属性を持たないことを宣言しているのでしょうか。
またform:not([ngNoForm]):not([ngFormModel]),ngForm,[ngForm]という風にカンマで3つにわかれていますが、これは、区切ることによって何を意味する宣言なのですか。検討がつきません。

Angularを使っている方、入門的な事ですが教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

最初の回答者さんが答えているように、その :not() はまさにCSSセレクタと同じものです。Angularが独自に定めた記法ではありません。

少し補足します。

'form:not([ngNoForm]):not([ngFormModel]),ngForm,[ngForm]', では、

  • form:not([ngNoForm]):not([ngFormModel]) または
  • ngForm または
  • [ngForm]

にマッチする要素にNgFormDirectiveを適用するようになります。

なぜnotを使っているかというとReactiveFormsとの区別、あるいはNgFormを使いたくないフォームのためです。ngNoForm属性をつけるとそのフォームはAngularのFormsModuleやReactiveFormsModuleの干渉を受けないネイティブのフォームとしてふるまうようになります。それはこのnotで除外されているからです。

ngFormModel属性はReactiveFormsModuleの管轄のディレクティブなので、同じform要素で衝突しないようにnotで除外されています。

tukatterさんの回答が正しいので、もし評価される場合はtukatterさんのほうにお願いします。

投稿2018/03/19 10:27

laco

総合スコア155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tukatter

2018/03/30 09:36

補足説明ありがとう。 両方読むことをオススメします。 ネイティブのフォームとして振舞うという説明は大事なことですよね。 読み返してそっちの説明の方が要ると気づき参考になりました。
guest

0

cssのセレクターとして考えると分かりやすいかもしれません。

http://weboook.blog22.fc2.com/blog-entry-382.html
「E:not(s)」 は 「sでないセレクタを持つE要素」

form:not([ngNoForm]):not([ngFormModel])

<form ngNoForm > とか <form ngFormModel >の記述が入ってないform要素を対象

または <ngForm> を対象 または <div ngForm=""> を対象

※カンマは または という or条件の意味

[]で囲まれた属性 ngNoForm ngFormModel が記載されたフォームタグは対象にしたくなかった
セレクタなのかと読み解きます

動かしてみないと挙動はわかりませんがこれでイメージできましたか?
間違っていたらすみません。

投稿2018/02/21 06:38

tukatter

総合スコア284

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問