私はAngularJSでパスワード/電子メールの確認指令を作成したいと思いますが、これまでに見たことのあるものは、DOMを大量に掘り下げたり、jQueryを利用したりしています。私ができるならば$ scopeのプロパティだけに依存したいと思います。それを行う最善の方法は何ですか?DOM操作やjQueryを使わずにAngularJSで電子メールやパスワードの確認を行う指示をするにはどうすればよいですか?
17
A
答えて
25
この種のディレクティブを実装するための多くの有用な方法を見て、DOM操作やjQueryを使用せずに行う方法を考え出しました。ここにはPlunk that shows howがあります。
それは使用することを含む:入力フィールド
- NG-モデルプロパティを$式を見る - 評価します。マッチ属性ディレクティブを追加するコントロールの$ modelValueに対して現在のスコープのコンテキストで "match"プロパティを使用します。
- $ invalidプロパティが基になるフォームでtrueの場合、送信ボタンを無効にします。
これは一部の人には便利だと思います。ここでは要点です:
var app = angular.module('app', [], function() {});
app.directive('match', function($parse) {
return {
require: 'ngModel',
link: function(scope, elem, attrs, ctrl) {
scope.$watch(function() {
return $parse(attrs.match)(scope) === ctrl.$modelValue;
}, function(currentValue) {
ctrl.$setValidity('mismatch', currentValue);
});
}
};
});
app.controller('FormController', function ($scope) {
$scope.fields = {
email: '',
emailConfirm: ''
};
$scope.submit = function() {
alert("Submit!");
};
});
次に、HTMLで:
<!DOCTYPE html>
<html ng-app="app">
<head lang="en">
<meta charset="utf-8">
<title>Custom Plunker</title>
<link rel="stylesheet" href="style.css">
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js"></script>
<script src="app.js"></script>
</head>
<body ng-controller="FormController">
<form name='appForm' ng-submit='submit()'>
<div class="control-group">
<label class="control-label required" for="email">Email</label>
<div class="controls">
<input id="email" name="email" ng-model="fields.email"
class="input-xlarge" required="true" type="text" />
<p class="help-block">[email protected]</p>
</div>
</div>
<div class="control-group">
<label class="control-label required" for="emailConfirm">Confirm Email</label>
<div class="controls">
<input name="emailConfirm" ng-model="fields.emailConfirm"
class="input-xlarge" required="true"
type="text" match="fields.email" />
<div ng-show="appForm.emailConfirm.$error.mismatch">
<span class="msg-error">Email and Confirm Email must match.</span>
</div>
</div>
</div>
<button ng-disabled='appForm.$invalid'>Submit</button>
</form>
</body>
</html>
1
これは私のためによく働く:
ディレクティブ:
angular.module('myApp').directive('matchValidator', [function() {
return {
require: 'ngModel',
link: function(scope, elm, attr, ctrl) {
var pwdWidget = elm.inheritedData('$formController')[attr.matchValidator];
ctrl.$parsers.push(function(value) {
if (value === pwdWidget.$viewValue) {
ctrl.$setValidity('match', true);
return value;
}
if (value && pwdWidget.$viewValue) {
ctrl.$setValidity('match', false);
}
});
pwdWidget.$parsers.push(function(value) {
if (value && ctrl.$viewValue) {
ctrl.$setValidity('match', value === ctrl.$viewValue);
}
return value;
});
}
};
}])
使い方
を<input type="email" ng-model="value1" name="email" required>
<input type="email" ng-model="value2" name="emailConfirm" match-validator="email" required>
表示エラー
<div ng-if="[[yourFormName]].emailConfirm.$error">
<div ng-if="[[yourFormName]].emailConfirm.$error.match">
Email addresses don't match.
</div>
</div>
+4
他の開発者がどのように動作するかを見ることができるように、フィドルを提供できますか?ありがとう –
関連する問題
- 1. 番号や電子メールを知らずにテキストメッセージ、電子メール、または電話を受けるにはどうすればいいですか?
- 2. FirebaseでDisplayNameに電子メール+パスワード認証を追加するにはどうすればよいですか? Android
- 3. javascriptまたはdjango経由で電子メールを確認するにはどうすればよいですか?
- 4. ローカルコンピュータで電子メールの確認をテストするにはどうすればよいですか?
- 5. 電子メールでページ間でリクエストをやりとりするにはどうすればいいですか?
- 6. 空の行列や空の列や行を持つ行列を操作しないようにするにはどうすればよいですか?
- 7. コードで使用するマクロをすばやく確認するにはどうすればよいですか?
- 8. 電子メールアドレスを確認せずにAmazon SNS経由で電子メールを送信するにはどうすればよいですか?
- 9. 確認メールを作成するにはどうすればよいですか?
- 10. 電子メールテンプレートに顧客の電子メールを表示するにはどうすればよいですか?
- 11. Laravel 5.2で、電子メールや電話のいずれかでログイン
- 12. メール確認やパスワードのポリシー
- 13. 電子メールとパスワードが正しいかどうかを確認するFirebase
- 14. 電子メール確認トークンを検証するにはどうすればよいですか?
- 15. laravel 5.2のログイン時に電子メールを確認するにはどうすればいいですか?
- 16. MYSQLはどのようにやり直し操作を行うのですか?
- 17. メールを開かずに別のユーザーの電子メールに電子メールを送信するにはどうすればよいですか? Xamarin Forms
- 18. 電子メールクライアントを使用して電子メールを送信するにはどうすればよいですか?
- 19. pipやeasy_installを使わずにpythonにデータセットをインストールするにはどうすればいいですか?
- 20. 電子メールを送信せずに電子メールアドレスが存在するかどうかを確認する方法?
- 21. クロムエクステンションのコンテンツスクリプトで解析エラーをすばやく確認するにはどうすればよいですか?
- 22. 電子メールを公開するにはどうすればよいですか?
- 23. Exchange EWS APIを使用して電子メールに応答するかどうかを確認するにはどうすればよいですか?
- 24. jqueryのすべてのクラスに対してコードを実行するにはどうすればよいですか? (.clickや何かを使わずに)
- 25. DoubleAnimationを1ずつ増やすにはどうすればよいですか?
- 26. すべての電子メールクライアントで動作するようにHTML電子メールを作成するにはどうすればよいですか?
- 27. tabViewで電子メール作成機能を使用するにはどうすればよいですか?
- 28. laravelの電子メールレイアウトでイメージを表示するにはどうすればよいですか?このように電子メールを送信する
- 29. Eメールや電話を確認せずにCognito User Poolsでユーザーを確認する方法は?
- 30. Authguard anglefire2電子メールが確認されているかどうかを確認
ええと、なぜdownvote?それ以外に "あなた自身の質問に答える/知識を共有する"機能があります。 Sheesh。 – JoshGough
あなたの意見は分かりません。どのようにすればいいのですか?質問をするときは、自分で答えることができれば知識を広めるように指定します。 – JoshGough
参照先:http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/ – JoshGough