Giá trị mặc định của mẫu Angularjs nếu Binding Null / Không xác định (Có bộ lọc)


180

Tôi có một ràng buộc mẫu hiển thị một thuộc tính mô hình gọi là 'ngày' là ngày, sử dụng bộ lọc ngày của Angular.

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

Càng xa càng tốt. Tuy nhiên, hiện tại, nếu không có giá trị trong trường ngày, ràng buộc sẽ không hiển thị gì. Tuy nhiên, tôi muốn nó hiển thị chuỗi 'Khác nhau' nếu không có ngày.

Tôi có thể có được logic cơ bản bằng cách sử dụng toán tử nhị phân:

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

Tuy nhiên tôi không thể làm cho nó hoạt động với bộ lọc ngày:

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

Làm cách nào tôi có thể sử dụng toán tử nhị phân cùng với bộ lọc ngày?

Câu trả lời:


293

Hóa ra tất cả những gì tôi cần làm là bọc phía bên trái của biểu thức trong dấu ngoặc mềm:

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

12
Điều này không hoạt động nếu bạn cần hiển thị giá trị '0' trong cột
neel shah

6
@neelshah Nó hoạt động nếu bạn làm một cái gì đó như:{{(gallery.date | date:'mediumDate') || "0"}}
Rahil Wazir

2
Không hoạt động nếu ngày bằng 0 thay vì không xác định, than ôi. Vẫn là một mẹo hay. Tôi sợ tôi phải tạo một bộ lọc tùy chỉnh cho trường hợp của tôi.
PhiLho

52

Tôi đã thực hiện bộ lọc sau:

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

        return input;
    }
});

Được sử dụng như thế này:

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

Ý tưởng tuyệt vời thực sự! Tôi đã mở rộng và sao chép nó một chút: lồng một if (angular.isUndefined(defaultValue) || ... )câu lệnh bên trong câu lệnh hiện có, qua đó defStringbộ lọc trả về chuỗi " default" (những cái khác có thể sẽ đến sau). Điều này cho phép tôi sử dụng nó như là <span>{{expected.string | defString}}</span>lấy defaultmức dự phòng cuối cùng.

37

Chỉ trong trường hợp bạn muốn thử một cái gì đó khác. Đây là những gì làm việc cho tôi:

Dựa trên Toán tử Ternary có cấu trúc sau:

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

Kết quả là:

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

1
Câu trả lời của Pedr (ngày 13 tháng 5 năm 13 lúc 13:27, stackoverflow.com/a/16523266/1563880 ) gần như giống nhau nhưng giải pháp của bạn rõ ràng hơn. Howerer, nhiều chữ cái hơn để viết)
nktssh

1
Điều này trực quan hơn, đặc biệt là khi đến từ một nền tảng lập trình. Toán tử ternary mở đường cho đơn giản Nếu khác Ifs.
vào

2
rất tiếc khi làm hỏng một chủ đề cũ, nhưng giải pháp này có lẽ cũng hiệu quả hơn câu trả lời được chấp nhận, bởi vì nó không gọi bộ lọc nếu giá trị sẽ xuất hiện sai
SnailCoil

Điều này cũng hữu ích hơn khi cần làm việc với hệ thống phân cấp sâu hơn.
Ngay cả Miên

8

Làm cách nào tôi có thể sử dụng toán tử nhị phân cùng với bộ lọc ngày?

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

bạn cũng thử:

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


0

Trong cshtml của bạn,

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

Trong tệp JS của bạn, có thể app.js,

Bên ngoài app.controll, thêm bộ lọc bên dưới.

Ở đây "mydate" là chức năng mà bạn đang gọi để phân tích ngày. Ở đây "ứng dụng" là biến chứa 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;
    };
});
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.