我建议为此使用指令。像往常一样,我尝试远离超时和其他异步操作,而不希望使用更具权威性和直接的控制权。
directives.directive('boolean', function() {
return {
priority: '50',
require: 'ngModel',
link: function(_, __, ___, ngModel) {
ngModel.$parsers.push(function(value) {
return value == 'true' || value == true;
});
ngModel.$formatters.push(function(value) {
return value && value != 'false' ? 'true' : 'false';
});
}
};
});
优先级是专门设置的,因此优先于其他任何指令(通常没有设置优先级,默认为 0
)
例如,我将此指令(用于true / false选择)与selectpicker
将我的select
元素包装在selectpicker
bootstrap插件使用。
编辑:
需要说明的是,我忘记提及的是,您的html值必须是字符串值。该指令的作用是在视图和模型之间转换,使模型值保持不变,boolean
而视图则采用以下string
格式:
%select.selectpicker{ ng: { model: 'modelForm.listed' }, selectpicker: '{ }', boolean: true }
%option{ value: 'true' } Listed
%option{ value: 'false' } Unlisted
<select ng-model="$ctrl.request.invoiced" class="form-control input-lg"> <option ng-value="undefined">All</option> <option ng-value="false">Not Invoiced</option> <option ng-value="true">Invoiced</option> </select>