Angularjs 通过角度指令将布尔值转换为是/否
我需要使用指令将布尔值显示为yes/no。我的指示如下Angularjs 通过角度指令将布尔值转换为是/否,angularjs,Angularjs,我需要使用指令将布尔值显示为yes/no。我的指示如下 directives.directive('niBooltoYesno', function () { return { restrict: 'EA', require: 'ngModel', link: function (scope, element, attrs, ngModel) {
directives.directive('niBooltoYesno',
function () {
return {
restrict: 'EA',
require: 'ngModel',
link: function (scope, element, attrs, ngModel) {
function formatter(value) {
if (value) {
return value === true ? 'Yes' : 'No';
} else {
return '';
}
}
ngModel.$formatters.push(formatter);
}
};
});
<ni-boolto-yesno data-ng-model="set_unit.isActive" ></ni-boolto-yesno>
directives.directive('niBooltoYesno',
函数(){
返回{
限制:“EA”,
要求:'ngModel',
链接:功能(范围、元素、属性、模型){
函数格式化程序(值){
如果(值){
返回值===true?'Yes':'No';
}否则{
返回“”;
}
}
ngModel.$formatters.push(格式化程序);
}
};
});
但它不起作用。请在这一点上帮助我。问题在于
if(value)
。这导致返回值===true代码>仅当值实际为truthy时才处理的行(即决不用于false
)。您只需正确构造条件:
function formatter (value) {
return (value === true) ? 'Yes' : ((value === false) ? 'No' : '');
}
可读性更好的版本:
function formatter (value) {
if (value === true) {
return 'Yes';
} else if (value === false) {
return 'No';
} else {
return '';
}
}
编辑:我还没有看过你的HTML。另一个答案指出,使用ng model
因为这是一个坏主意,创建一个过滤器应该很适合你。你没有使用合适的工具来完成这项工作。这应该是一个过滤器:
{{ someBooleanValue | yesNo }}
过滤器将简单到
module.filter('yesNo', function() {
return function(input) {
return input ? 'yes' : 'no';
}
});
如果您仍然选择使用指令,则不需要ngModel和formatters,后者用于必须读写模型的表单字段。您只需要一个模板:
module.directive('yesNo', function() {
return {
template: '<span>{{ yesNo ? "yes" : "no" }}</span>',
scope: {
yesNo: '='
}
};
});
module.directive('yesNo',function(){
返回{
模板:{{yesNo?}是:“{no}}”,
范围:{
是否:'='
}
};
});
你会把它当作
<span yes-no="someBoolean"></span>
我使用
{{object.PROPERTY?'Yes':'No'}}
…当出现这样的情况时:
{
"PROPERTY": 0
}
结果将是“否”。您应该准确地描述它是如何工作的,或者提供一个JSFIDLE/codepen。为什么不使用类似于{{user.booleanValue?'yes':“No'}}}的过滤器来解决我的问题呢?这确实是一个更好的答案。它既简单又干净。JB Nizet给出的答案非常好,但在这种情况下,这是一种过分的做法。它适用于更复杂的场合。if语句的嵌套有点不正确(格式化版本)。您没有添加else if块。三元运算符的else块将包含第二个if-elseblock@Kieran如果A{X}else{if B{Y}else{Z}
相当于如果A{X}else如果B{Y}else{Z}
而扁平化的代码总是更容易阅读。