を大事とき、私はちょうど角度からの奇妙な行動に遭遇しました:ここ角度ディレクティブの名前は本当に
シナリオです:
登録フォームでは、私は、HTTP呼び出して(電子メールの一意性をチェックしますサーバーへ)。
したがって、私はクライアントコードであるemailUnique
と呼ばれるディレクティブ作成:
<form name="form" novalidate>
<!-- some other fields -->
<input name="email" type="email" ng-model="user.email" required email-unique/>
</form>
ポストの残りのために、のは、ユーザーが入力していると仮定してみましょう:michael
を、それは明らかに有効なメールではありません。
angular.module('directives.emailUnique', [])
.directive('emailUnique', function() {
return {
restrict: 'A',
require: 'ngModel',
link: function (scope, el, attrs, ctrl) {
ctrl.$parsers.push(function (viewValue) {
console.log(viewValue); //What do you expect here for viewValue? answer below
});
}
};
});
一目見ただけで、答えを与える前に、応答は論理的に次のようになります:
に私は興味がある行動を誘発する、のは私の指示コードの面白い部分を見てみましょう
undefined
なぜですか?なぜなら:
type="email"
属性ではなく、単にtype="text"
michael
が有効なメールではありません私たちは、正確な。- Angularのコンパイラは、従来のHTMLの動作に準拠しているはずです。
これをテストした後、答えは期待通りにundefined
です。私の完全なディレクティブのロジックはそれに基づいており、全体がうまく動作します。
ここで、emailUnique
という名前をsomethingUnique
に変更しましょう。
クライアントが今いる:
<input name="email" type="email" ng-model="user.email" required something-unique/>
サプライズ:console.log(viewValue)
は今表示している:電子メールのフィールドを扱うときmichael
、ないundefined
...
email
で始まる奇妙な効果がありますこの場合。
私の質問は簡単です:いい理由はありますか?バグはありますか?私はいくつかの考えを誤解するかもしれませんか?
いくつかの更なる精度:
- 角度付きメール欄についてAngular's documentationは
email-unique
に干渉する可能性があり、いくつかのemail
属性を提示していません。実際には、type="email"
- に基づいています。フォームの
novalidate
属性が存在するかどうかにかかわらず、同じ問題が発生しました。
ここに私が問題を示すために作成したplunkrがあります:http://plnkr.co/edit/T9YfiDr5IU5vOrMtggY3?p=preview – Mik378