2014-11-23 2 views
11

지시어를 사용하여 부울 값을 예/아니요로 표시해야합니다. 내 지시어는 아래와 같습니다.각도 지시어로 부울 값을 yes/no로 변환합니다.

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> 

그러나 작동하지 않습니다. 이 시점에서 저를 도우십시오.

+0

제대로 작동하지 않거나 jsfiddle/codepen을 제공해야합니다. – hon2a

+0

{{user.booleanValue? 'yes': 'no'}} –

답변

49

작업에 올바른 도구를 사용하지 않습니다. 당신은 여전히 ​​지시어를 사용하도록 선택하는 경우, 당신은 ngModel와 포매터를하지 않아도 간단

module.filter('yesNo', function() { 
    return function(input) { 
     return input ? 'yes' : 'no'; 
    } 
}); 

{{ someBooleanValue | yesNo }} 

이 필터는 것이 양식에 사용되는 :이 필터해야 모델을 읽고 쓰는 필드. 당신이 필요로하는 템플릿입니다 :

module.directive('yesNo', function() { 
    return { 
     template: '<span>{{ yesNo ? "yes" : "no" }}</span>', 
     scope: { 
      yesNo: '=' 
     } 
    }; 
}); 

당신은 ... 1이 내가 0 텍스트 값을 정의

<span yes-no="someBoolean"></span> 
+0

필자의 경우 필터가 완벽합니다. –

2

문제는 if (value)입니다. 이로 인해 return value === true ? ... 행은 값이 실제로 사실 일 때만 처리됩니다 (즉, 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을 사용하는 것은 좋지 않은 생각입니다. 필터를 작성하는 것이 좋습니다.

+0

if 문에 중첩이 약간 (형식이 지정된 버전) 인 이유는 무엇입니까? else-if 블록을 추가하지 않습니다. 삼항 연산자의 else 블록은 두 번째 else if 블록을 포함합니다. – Kieran

+0

@Kieran'A {X} else {B {Y} else {Z}}'는'A {X} else if B {Y } else {Z}'와 병합 된 코드는 항상 읽기 쉽습니다. – hon2a

5

로 사용하고 woud

{{object.PROPERTY?'Yes':'No'}} 

... 때 다음과 같이 표시됩니다.

{ 
    "PROPERTY": 0 
} 

결과 그러면 '아니오'가됩니다.

+1

정말 좋은 답변입니다. 그것은 간단하고 깨끗합니다. JB Nizet의 대답은 완벽하게 정상적으로 작동하지만이 시나리오에서는 지나치게 길다. 더 복잡한 경우에 적합합니다. – Rob

관련 문제