0

この投稿は、角度のあるカスタム検証固有の電子メール トリガーの一歩前進です。

古い投稿のコードで、フィールド email (サーバーに送信するとき) の値が定義されていないことに気付いたので、次のように試しました

<!doctype html>
<html data-ng-app="myApp">
    <head>
         <meta charset="utf-8">

    </head>
    <body>
        <div data-ng-controller="myCtrl">
            <form novalidate id="frm-signup" name="addContestantFrm" data-ng-submit="add()">
                <div>
                    <label for="email">Email: *</label>
                    <input type="email" id="email" name="email" class="input-medium" tabindex="3" title="email" maxlength="255" value="{{contestant.email}}" placeholder="email" data-ng-model="contestant.email" required email-unique />
                </div>
                <div>
                    <input type="submit" id="sbmt" name="sbmt" class="input-sbt" data-ng-disabled="!addContestantFrm.$valid" value="Send" />
                </div>
            </form>
        </div>
         <script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
        <script src="http://code.angularjs.org/1.0.8/angular.min.js"></script>
        <script>
            var app = angular.module('myApp', []);
            app.factory('Contestant',function($http){
                return {
                    checkUniqueEmail : function(email){
                        return $http.post('./checkemail.php',{email:email});
                    }
                }
            });
            app.controller('myCtrl',function($scope){
                $scope.add = function(){
                    console.log($scope.contestant);
                }
            });
            app.directive('emailUnique',function(Contestant) {
                return {
                    require: 'ngModel',
                    link: function(scope, element, attrs,ctrl) {
                        ctrl.$parsers.unshift(function(viewValue) {
                            console.log(ctrl.$error.email);
                            Contestant.checkUniqueEmail(viewValue).success(function (response) {
                                ctrl.$setValidity('emailUnique', true);
                                scope.$apply(function(scope) {
                                    ctrl.$setViewValue('email', viewValue);
                                });
                                return viewValue;
                            })
                            .error(function (data) {
                                ctrl.$setValidity('emailUnique', false);
                                console.log(viewValue);
                                return undefined;
                            });
                        });
                    }
                }
            });
        </script>
    </body>
</html>

進行中の $digestを教えてください

では、サーバーに送信する電子メールの値を設定する方法はありますか (ここでは例を示します)。

アップデート

私はifで試しました

(!scope.$$phase) {
  //never excuted
}
4

2 に答える 2

0

timeJV は正しかったのですが、問題は http post promise の処理にありました。このパターンで行う必要があります

var deferred=$q.defer() 
http.post(...).success(...).error(...);
return defered.promise

ここであなたのコードからjsfiddleを作成し、それが機能するようにいくつかの変更を加えました.

他に必要なものがあれば教えてください

于 2014-09-03T21:05:40.253 に答える