假设,我想对文本输入应用屏蔽功能。可能是正确地设置电话号码输入的样式(例如,对于 input 5553334444
,它将输出(555) 333-4444
),或者只是将输入控件中的值大写。
我知道的方法使用ngModel
控制器(通过)并在函数中require: "ngModel"
设置新的大写:$viewValue
$parser
ngModel.$parsers.unshift(function(val){
var uppercase = val && val.toUpperCase();
if (uppercase !== val){
ngModel.$setViewValue(uppercase);
ngModel.$render();
}
return uppercase;
});
但是现在,假设我想使用ng-model-options="{debounce: 400}"
,因为我不想太快地触发模型的变化:
<input ng-model="foo" ng-model-options="{debounce: 400}"
ng-change="doBackendQuery(foo)"
uppercase>
在上面的示例中,我不想触发doBackendQuery
太快,因为它会进行 HTTP 调用。debounce
会阻止这种情况发生,但也会阻止uppercase
指令立即执行,导致用户看到小写文本。
问:如何编写uppercase
指令来$viewValue
立即更改,而无需等待debounce
?
(注意:我不想对底层 DOM 元素做出假设——这会违背 DOM-agnostic 的想法ng-model
)