바인딩 Null / 정의되지 않은 경우 Angularjs 템플릿 기본값 (필터 포함)


180

Angular의 날짜 필터를 사용하여 날짜 인 'date'라는 모델 속성을 표시하는 템플릿 바인딩이 있습니다.

<span class="gallery-date">{{gallery.date | date:'mediumDate'}}</span>

여태까지는 그런대로 잘됐다. 그러나 현재 날짜 필드에 값이 없으면 바인딩에 아무것도 표시되지 않습니다. 그러나 날짜가 없으면 문자열 'Various'를 표시하고 싶습니다.

이진 연산자를 사용하여 기본 논리를 얻을 수 있습니다.

<span class="gallery-date">{{gallery.date || 'Various'}}</span>

그러나 날짜 필터와 함께 작동하도록 할 수는 없습니다.

<span class="gallery-date">{{gallery.date | date:'mediumDate' || "Various"}}</span>

날짜 필터와 함께 이항 연산자를 사용하려면 어떻게해야합니까?

답변:


293

내가해야 할 일은 부드러운 괄호로 표현의 왼쪽을 감싸는 것입니다.

<span class="gallery-date">{{(gallery.date | date:'mediumDate') || "Various"}}</span>

12
열에 '0'값을 표시해야하는 경우에는 작동하지 않습니다.
neel shah

6
@neelshah 다음과 같은 일을하면 효과가 있습니다 :{{(gallery.date | date:'mediumDate') || "0"}}
Rahil Wazir

2
정의되지 않은 아아 대신 날짜가 0이면 작동하지 않습니다. 그래도 여전히 좋은 트릭입니다. 내 경우에 맞게 맞춤 필터를 만들어야 할까봐 걱정됩니다.
PhiLho

52

다음 필터를 만들었습니다.

angular.module('app').filter('ifEmpty', function() {
    return function(input, defaultValue) {
        if (angular.isUndefined(input) || input === null || input === '') {
            return defaultValue;
        }

        return input;
    }
});

이렇게 사용하려면 :

<span>{{aPrice | currency | ifEmpty:'N/A'}}</span>
<span>{{aNum | number:3 | ifEmpty:0}}</span>

정말 멋진 아이디어! 그래도 확장하고 복제했습니다. if (angular.isUndefined(defaultValue) || ... )기존 문장 안에 문장을 중첩 하면 defString필터가 문자열 " default"을 반환합니다 . 다른 것은 나중에 올 것입니다. 이 날로 사용할 수 있습니다 <span>{{expected.string | defString}}</span>얻을 default최종 대체 수준으로.

37

다른 것을 시도하고 싶을 경우를 대비하여. 이것이 나를 위해 일한 것입니다.

다음과 같은 구조를 가진 3 차 연산자를 기반으로합니다.

condition ? value-if-true : value-if-false

결과로:

{{gallery.date?(gallery.date | date:'mediumDate'):"Various" }}

1
Pedr의 답변 (5 월 13 '13 at 13:27, stackoverflow.com/a/16523266/1563880 )은 거의 동일하지만 솔루션이 더 명확합니다. Howerer, 더 많은 편지 쓰기)
nktssh

1
이것은 특히 프로그래밍 배경에서 올 때 더 직관적입니다. 삼항 연산자는 간단한 If else Ifs를위한 길을 열었습니다.
ass

2
오래된 스레드를 부딪 히게해서 미안하지만,이 솔루션은 아마도 허용 된 답변보다 더 성능이 좋을 것입니다. 값이 잘못되면 필터를 호출하지 않기 때문입니다.
SnailCoil

더 깊은 계층 구조로 작업해야 할 때도 더 유용합니다.
심지어 Mien

8

날짜 필터와 함께 이항 연산자를 사용하려면 어떻게해야합니까?

<span class="gallery-date">{{gallery.date | date:'mediumDate' || "Date Empty"}}</span>

당신은 또한 시도 :

<span class="gallery-date">{{ gallery.date == 'NULL' ? 'mediumDate' : "gallery.date"}}</span>


0

cshtml에서

<tr ng-repeat="value in Results">                
 <td>{{value.FileReceivedOn | mydate | date : 'dd-MM-yyyy'}} </td>
</tr>

JS 파일에서 app.js,

app.controller 외부에 아래 필터를 추가하십시오.

여기서 "mydate"는 날짜를 구문 분석하기 위해 호출하는 함수입니다. 여기서 "app"는 angular.module을 포함하는 변수입니다.

app.filter("mydate", function () {
    var re = /\/Date\(([0-9]*)\)\//;
    return function (x) {
        var m = x.match(re);
        if (m) return new Date(parseInt(m[1]));
        else return null;
    };
});
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.