【问题标题】:How to validate ng-tags-input with promise?如何使用 promise 验证 ng-tags-input?
【发布时间】:2016-08-24 07:02:02
【问题描述】:

我正在尝试通过调用服务器端 api 来验证添加的标签。以下是代码。

 <tags-input ng-model="user.trucks" 
             add-on-space="true" 
             on-tag-adding="checkTruck($tag)">
 </tags-input>

在我编写的控制器中,

$scope.checkTruck = function(tag){
  var x = $q.defer();

  someService.checkTruck(tag).then(function(response){
      x.resolve(true);
  }, function(response){
      x.reject(false);
  });

  return x.promise; 
};

虽然文档说 on-tag-adding 可以接受一个承诺并验证添加的标签,但它不是这样工作的。我错过了什么吗??

【问题讨论】:

  • “它不是那样工作的” - 到底发生了什么?

标签: angularjs ng-tags-input


【解决方案1】:

您确实知道需要从您的 resolvereject 处理程序返回值!?

$scope.checkTruck = function(tag){
    var deferred = $q.defer();

    someService.checkTruck(tag).then(function(response){
        return deferred.resolve(true);
    }, function(response){
        return deferred.reject(false);
    });

    return x.promise; 
};

然后,我们可以删除您在那里完成的 the explicit promise construction 并返回一个已解决或已拒绝的承诺,这将使您在没有延迟对象的情况下保持布尔值。

$scope.checkTruck = function(tag){
    return someService.checkTruck(tag).then(function(response){
        return $q.when(true);
    }, function(response){
        return $q.reject(false);
    });
};

这就是我进行验证的方式

有关.when的更多信息,请参阅$q docs

【讨论】:

    猜你喜欢
    • 2016-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多