2013-05-13 35 views
138

Tôi có một mẫu liên kết hiển thị thuộc tính mô hình được gọi là 'ngày', là ngày tháng, sử dụng bộ lọc ngày của Angular.Mẫu Angularjs Giá trị mặc định nếu Ràng buộc Null/Không xác định (Có bộ lọc)

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

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

tôi có thể nhận được logic cơ bản sử dụng một nhà điều hành nhị phân:

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

Tuy nhiên tôi không thể có được nó để làm việc với các bộ lọc date:

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

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

Trả lời

236

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

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

này sẽ không hoạt động nếu giá trị là ' "1"' – 0xcaff

+11

này không hoạt động nếu bạn cần để hiển thị một '0' giá trị trong cột –

+5

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

25

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 ternary điều hành mà đã sau cấu trúc:

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

Kết quả:

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

Câu trả lời của Pedr (May 13 '13 at 13:27, http://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 để viết) – nktssh

+1

Điều này trực quan hơn, đặc biệt là khi đến từ nền tảng lập trình. Các toán tử Ternary mở đường cho đơn giản Nếu Ifs khác. – asgs

+2

xin lỗi để đụng một chuỗi cũ, nhưng giải pháp này cũng có thể hoạt động tốt 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 false – SnailCoil

49

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> 
+0

Giải pháp tuyệt vời! Rất thanh lịch! Tôi thích nó ;-) – llasarov

+0

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

3

Tôi thực sự thích câu trả lời này, với ngBind, văn bản mặc định của bạn chỉ có thể sống trong cơ thể yếu tố, và sau đó nếu ngBind đánh giá một cái gì đó không null/không xác định, nội dung của bạn được thay thế tự động, và Everythings hạnh phúc

angularjs setting default values to display before evaluation

0

Làm thế nào tôi có thể sử dụng toán tử nhị phân cùng với các 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> 
Các vấn đề liên quan