2014-05-24 14 views
5

Ben 'Çevrimiçi Kitabevi'açısal mı?

çıkarır aşağıdaki kodu

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

verildi ve ben ben girdi 'Fred' o çıktılar 'Fred Çevrimiçi Kitabevi'

jQuery kullanarak ve yapmadan şeyleri açısal bir şekilde, kodu nasıl değiştiririm, böylece giriş boş olmadığında bir iyelik ve kesme harfleri eklendi?

EG

İnternet Kitabevi'nden giriş boştur ve

Fred'in Çevrimiçi Kütüphanesi'nde

girdi 'Fred' dizesi

cevap

16

kapsam şeyler değerlendirebilir sadece bir yer olduğunu unutmayın içeriyor. Yani tam olarak ne yapabiliriz. (expression)?<true clause>:<false clause>; ve eşittir: ? formun bir üçlü operatörüdür

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

Modifiye kodu:

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

Düzenleme: Bu, onun muhtemelen daha iyi çalışır halde diğerleri işaret olarak mantığı görünümden gizlemek için. Bu, bir kapsam işlevini çağırarak veya bunu beklendiği gibi dönüştürmek için değişkene bir filtre uygulayarak yapılabilir.

+1

Eğer açısal bu şekilde üçlü operatörü kullanamazsınız hariç. – Quad

+0

bu size bir lexer hatası verecektir: Lexer Error: Ekspresyonda [ownername.length] sütunlarda 18-18 [?] Beklenmeyen bir sonraki karakter kullanıcı adı + "'s": ""]. – Quad

+0

@Quad AngularJS [bir yıldan fazla süredir] üçlü operatörünü destekledi (https://github.com/angular/angular.js/commit/6798fec4390a72b7943a49505f8a245b6016c84b) – user113215

4

Bir filtre kullanın! Sonra

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

:

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

Bunu işe alamıyorum – PrimeLens

+0

Bu benim için çalıştı. Bir boole üzerinde true/false değerini yes/no olarak değiştirmem gerekiyordu. – Anthony