0

我正在使用 Angular Material mdDialog 在对话框中显示一个小表单。我正在调用一个指令用户名可用以在其中进行异步验证。

对话框.tmpl.html:

<md-dialog aria-label="Save Scenario">
<form name="userForm" novalidate >

 <input style="display:inline-block" name="Name"  ng-model="SaveScenario.ScenarioName" ng-pattern="pattern"  
                   required  username-available ng-model-options="{ updateOn: 'blur' }">

</form>
</md-dialog>

应用程序.js:

module.directive('usernameAvailable', function($timeout, $q,UserService) {
  return {
    restrict: 'A',
    require: 'ngModel',
    link: function(scope, elm, attr, ngModel) { 
      ngModel.$asyncValidators.usernameExists = function(modelValue, viewValue) {


        var currentValue = modelValue || viewValue;

        UserService.checkifScenarioNameExists(currentValue)
        .then(
                        function (d) 
                        {                            
                            console.log("the data object from promise is", d.data);
                            if ( d.data == true)
                            {
                                console.log("username exists");
                           //        deferred.resolve(d.data); 
                                   return $q.resolve(d.data);
                            }
                            else
                            {
                                console.log("username does not exist");
                                ngModel.$setValidity('usernameExists', false); 

                                  return $q.reject(d.data);
                            }


                        },
                        function (errResponse) {
                            console.error('The Promise was unsuccessfull');
                        }

                );

      };
    }
  } 
});

这是我的对话框的样子,并且还显示了错误:

对话框

我认为我在指令中返回承诺的语法是正确的。我不确定它是否可能与 md-dialog 相关。有人可以帮忙解释为什么会发生这个错误吗?

4

1 回答 1

1

如错误所述,expected asynchronous validator to return a promise. 在验证器内部,您在使用 UserService 之前错过了 return 语句。

return UserService.checkifScenarioNameExists(currentValue).then(...)
于 2016-08-13T16:33:45.913 回答