Ich würde empfehlen, hierfür eine Direktive zu verwenden. Wie üblich versuche ich, mich von Zeitüberschreitungen und anderen asynchronen Vorgängen fernzuhalten, anstatt eine autoritativere und direktere Kontrolle zu bevorzugen.
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';
});
}
};
});
Die Priorität wird speziell so festgelegt, dass sie vor anderen Anweisungen ausgeführt wird (für die normalerweise keine Priorität festgelegt ist, und standardmäßig) 0
).
Zum Beispiel verwende ich diese Direktive (für eine True / False-Auswahl) mit meiner selectpicker
Direktive, die meine select
Elemente in die einschließtselectpicker
Bootstrap-Plugin einschließt.
Bearbeiten:
Die Einschränkung hier, die ich vergessen habe zu erwähnen, ist, dass Ihre HTML-Werte Zeichenfolgenwerte sein müssen. Die Direktive übersetzt zwischen der Ansicht und dem Modell, wobei der Modellwert boolean
und Ihre Ansicht im string
Format bleiben:
%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>