2014-05-24 16 views
5

Tôi cho đoạn mã saugóc cạnh, ng-nếu thay đổi văn bản?

<h2>{{ownername}} Online Bookshop</h2> 
<input placeholder="type your name" ng-model="ownername" > 

Những kết quả đầu ra 'trực tuyến thư quán'

và nếu tôi đầu vào 'Fred' nó ra 'Fred trực tuyến thư quán'

Nếu không sử dụng jQuery, và làm những điều theo cách góc cạnh, làm thế nào tôi sẽ thay đổi mã để một dấu nháy đơn sở hữu và các chữ cái được thêm vào khi đầu vào không rỗng?

EG

online thư quán khi đầu vào là trống rỗng, và

online thư quán Fred khi đầu vào chứa 'Fred' chuỗi

Trả lời

16

Hãy nhớ rằng phạm vi chỉ là một nơi mà bạn có thể đánh giá sự vật. Vì vậy, đó chính xác những gì chúng ta có thể làm. Các ? là một nhà điều hành ternary có dạng: (expression)?<true clause>:<false clause>; và bằng:

if(expression) { <true clause>; } 
else { <false clause>; } 

đang Modified:

<h2>{{ ownername.length ? ownername + "'s " : "" }}Online Bookshop</h2> 
<input placeholder="type your name" ng-model="ownername" > 

Edit: Mặc dù các công trình này, có lẽ nó tốt hơn như những người khác chỉ ra để ẩn logic khỏi chế độ xem. Điều này có thể được thực hiện bằng cách gọi hàm phạm vi hoặc áp dụng bộ lọc cho biến để biến đổi như mong đợi.

+1

trừ bạn không thể sử dụng toán tử ternary trong góc theo cách này. – Quad

+0

điều này sẽ cung cấp cho bạn một lỗi lexer: Lỗi Lexer: Nhân vật tiếp theo bất ngờ tại cột 18-18 [?] Trong biểu thức [ownername.length? tên người dùng + "'s": ""]. – Quad

+0

@Quad AngularJS đã hỗ trợ toán tử ba năm [trong hơn một năm] (https://github.com/angular/angular.js/commit/6798fec4390a72b7943a49505f8a245b6016c84b) – user113215

4

Sử dụng bộ lọc!

app.filter('possessive', function() { 
    return function(val) { 
    if (!val) return ''; 
    return val + '\'s'; 
    }; 
}); 

Sau đó:

<h2>{{ ownername | possessive }} Online Bookshop</h2> 
+0

Tôi không thể làm điều này để làm việc – PrimeLens

+0

Điều này làm việc cho tôi. Tôi cần thay đổi true/false thành yes/no trên bool. – Anthony

Các vấn đề liên quan