2015-10-18 64 views
2

我正在爲我的應用使用aurelia-validation。我想要做的是在成功提交後將表單重置爲空值。成功提交後重置aurelia驗證

這是我的觀點類:

@inject(Validation) 
export class Inquire { 

    @ensure(isName) 
    firstName = ''; 

    @ensure(isName) 
    lastName = ''; 

    . . . 

    constructor(validation) { 
     this.validation = validation.on(this); 
    }; 

    sendInquiry() { 
     this.validation.validate() 
      .then(() => { 
       // make API call here, which works 
       // reset fields 
       this.firstName = ''; 
       . . . 
      }).catch((validationResult) => { 
       console.log(validationResult); 
      }); 
    }; 
}; 

如果我設置了firstNamelastName等領域回空字符串,表單驗證被重新觸發。我怎樣才能防止這種情況發生?

看起來你應該能夠撥打.clear().destroy()ValidationGroup作爲referenced here in the source code,但這不適合我。

+1

調用'this.validation.clear()'清理出的字段後爲我工作的罰款...做什麼你的意思是「不適合我」?您在控制檯中看到驗證錯誤或錯誤? – nemesv

+0

呵呵。我無法解釋爲什麼它現在可以工作,但在將字段設置回其默認值後調用'.clear()'是**工作。奇怪的! – Brandon

+1

調用'.clear()'應該是文檔和示例的一部分。 – Brandon

回答

2

ValidationGroupclear()方法應該做的伎倆。問題的關鍵是,你必須把這個後您清除您的領域:

sendInquiry() { 
    this.validation.validate() 
     .then(() => { 

      // make API call here, which works 
      // reset fields 
      this.firstName = ''; 
      . . . 

      //this resets the validation and clears the error messages 
      this.validation.clear(); 

     }).catch((validationResult) => { 
      console.log(validationResult); 
     }); 
}; 

在新奧裏利亞驗證版本(後2016八月),你需要使用reset方法:

this.validation.reset() 

看到在documentation

validate所述方法相反的是reset。調用不帶參數的重置將使任何以前呈現的驗證結果不受理。你可以提供一個復位指令復位限制到特定的對象或屬性:

controller.reset(); 
controller.reset({ object: person }); 
controller.reset({ object: person, propertyName: 'firstName' }); 
+0

在Aurelia的新版本中,這個更改爲'this.validation.reset()'。 – LStarky