私は非常に単純なサインアップ フォームを作成しようとしていますが、これは 2 つのステップで機能するはずです。
- 最初のステップでユーザーにメールアドレスを尋ねます
- 2 番目のステップでは、ユーザーにその他の詳細を尋ねます (ステップ == 2)。
テンプレートは単純です。
<div class="input-group layout-container" ng-switch on="step">
<!-- Login -->
<img src="images/yeoman.png">
<p>{{msg}}</p>
<form name="signup">
<input type="text" class="form-control login" placeholder="firstname" ng-model="firstname" ng-switch-when="2">
<input type="text" class="form-control login" placeholder="lastname"ng-model="lastname" ng-switch-when="2">
<input type="email" class="form-control login" placeholder="email" ng-model="email" ng-switch-when="1" required>
<span class="error" ng-show="signup.input.$error.required">Cannot be blank</span>
<span class="error" ng-show="signup.input.$error.email">Not a valid email</span>
<input type="password" class="form-control login" placeholder="password" ng-model="pass" ng-switch-when="2"> <br/><br/>
<div class="btn-container">
<button class="btn btn-primary" ng-click="next()">Next</button>
</div>
</form>
</div>
ご覧のとおり、いくつかの基本的な検証も行われており、メールの値をメールと呼ばれるモデルに割り当てています。
そして、コントローラーは次のようになります。
.controller('SignupCtrl', function ($scope) {
$scope.msg = "First, your email";
$scope.step = 1;
$scope.email = ''; // this still doesn't help
$scope.$watch('email', function (now, then, scope) {
console.log('email change', now, then);
});
$scope.next = function () {
$scope.step = Math.min($scope.step + 1, 2);
};
})
問題はこれです: 'email' の $watch はまったくトリガーされません。これはどこが間違っていますか?