2013-04-29 49 views
5

爲題狀態,我怎麼觸發時採取的措施裏面如何觸發角解析器沒有在現場

modelController.$parsers(...) 

的地方,而無需用戶輸入......我能想到的唯一途徑輸入查詢什麼在他們包裹在函數內部並調用它,但有沒有更好的方式來觸發

**//pseudo 
$(modelController).trigger('just got dirty');** 

我需要這樣做的原因是觸發輸入字段來驗證自己的提交頁面。

回答

9

我已經找到一種方法來解決這個問題 - 只需要調用與模型值解析器:

angular.forEach(ngModel.$parsers, function (parser) { 
    parser(ngModel.$viewValue); 
}); 

它非常簡單,它似乎是最正確的解決方案。

+0

這對我來說非常合適(版本1.2.29) - 謝謝!爲什麼這個簡單的答案不會更廣泛?爲了稍微改進答案,使用原生'for'循環而不是'angular.forEach',檢查解析器的'name'屬性,並且只重新觸發你想要的而不是所有的東西(如果適用的話)和'break'循環一旦你觸發你想要的。但是,這些只是微觀優化。 – 2017-12-05 17:03:26

1

這個問題是實際的,我也...因爲我解決這個問題:

var triggerParsers = function() { 
    var val = ngModel.$viewValue; 
    ngModel.$setViewValue(null); 
    ngModel.$setViewValue(val); 
}; 
+0

我相信答案是do element.trigger('change'); – user2167582 2014-08-20 16:49:19

+0

我已經嘗試過使用element.trigger,但是這個技巧不起作用,這是因爲事件被觸發了,但是值沒有改變,因此angular不會啓動解析器。 – 2014-09-09 12:08:43