等待指令

时间:2016-01-13 12:13:26

标签: angularjs

我的directiveform,其模板包含两个text fields。可以使用textfieldnumber)填写第一个id。只要focusfield丢失,就会GET完成id,并在第二个text field中填写validation的相应名称。填写数据库中不存在的数字(找不到名称)时,该字段的false将为GET

我遇到的问题是,当你填写错误的数字(例如-1)并直接点击“保存”按钮时,我的表格将在Ajax电话和我的指令之前提交将有效而非无效。

有没有办法让函数等待指令完成其$timeout调用或类似的事情?

我尝试了0 $values延迟,在队列末尾放置我的函数调用(从按钮开始),但仍然无法解决我的问题。

1 个答案:

答案 0 :(得分:1)

$asyncValidators提供了您想要的内容,ngModelController$asyncValidators的一部分。他们拒绝确认等待承诺的解决。

来自文档:

  

$pending预期的验证集合         执行异步验证(例如HTTP请求)。提供的验证功能         在模型验证过程中运行时,预计会返回一个承诺。一旦承诺         如果已交付,则验证状态将在满足时设置为true,在拒绝时将设置为false。         触发异步验证器时,每个验证器将并行运行并与模型一起运行         只有在满足所有验证器后才会更新值。只要一个异步验证器         如果未实现,其密钥将添加到控制器4xx属性中。此外,所有异步验证器         只有在所有同步验证器都通过后才会运行。

     

请注意,如果使用$ http,则服务器返回成功的HTTP响应代码以完成验证和状态级别 ngModel.$asyncValidators.uniqueUsername = function(modelValue, viewValue) { var value = modelValue || viewValue; // Lookup user by username return $http.get('/api/users/' + value). then(function onFulfilled() { //username exists, this means validation fails //throw to reject promise throw 'exists' // }, function onRejected() { //username does not exist, therefore this validation passes return true; }); }; 以拒绝验证非常重要。

- AngularJS ngModelController API Reference -- $asyncValidators

  [HttpPost]
    public ActionResult LockUser(string Id)
    {
        var datastore = new UserStore<ApplicationUser>();
        var manager = new UserManager<ApplicationUser, string>(datastore);
        //update current user object in memory
        //var user = User.Identity.GetApplicationUser();
        var user = manager.FindById(Id);
        user.LockoutEnabled = true;
        user.LockoutEndDateUtc = DateTime.UtcNow.AddYears(2);
        manager.UpdateAsync(user);
        var dbcontext = datastore.Context;
        //update user object in database
        dbcontext.SaveChanges();
        return RedirectToAction("Index");
    }