2015-11-06 9 views
5

Dizesi arasındadır.Nicer yolu bir koşul <code>isLoggedIn</code> doğruysa <strong>merhaba adı</strong> görüntülemek istediğiniz ve sadece <strong>merhaba</strong> aksi ES6 dize şablonuna

ben düz eski dize birleştirme 'sözdizimi daha güzel yapmak için denemek için ES6 Dize şablonları kullanıyorum. Ancak bunu yapmak için buldum iyi yolu özellikle ben bunu yapmak istiyorum birden fazla değişken var artık şablonları, hala çok güzel sözdizimi değil aşağıdaki (es6fiddle)

`hello ${mockIsLoggedIn(false) ? username : ''}` 

olduğunu.

Ben bir koşulu temel isteğe şablonlar içine dizeleri içeren bir sözdizimi bulmaya çalışıyorlar, ama bir tane sanmıyorum. Koşul yanlışsa o Dizesi'ne yanlış kılan,

`hello ${condition && username}` 

Ama: Böyle bir şey daha güzel olurdu.

Ben de, kendisi değişken içine username ait truthiness pişirme çalıştı yani o yoksa username undefined veya null olmak zorunda - dize şablon sonra sadece tanımsız veya boş kılmaktadır ancak.

Daha iyi bir sözdizimi veya yaklaşım önerebilir veya String yöntemi ile yapacağım ilk yöntem hangisi olabilir?

+1

İstediğiniz şeyi elde etmek için, 'condition'' '' 'olmalıdır. – loganfsmyth

cevap

3

condition && value || ""'u kullanabilirsiniz, ancak bu üçlü operatör kadar azdır. Yorumlarınız ve diğer yanıtında ima olarak bir süre sonra buna geri geliyor

function nonEmpty(parts) { 
    var res = parts[0]; 
    for (var i=1; i<parts.length; i++) { 
     if (arguments[i]) // you might want to handle `0` different 
      res += arguments[i]; 
     res += parts[i]; 
    } 
    return res; 
} 

console.log(nonEmpty`hello ${mockIsLoggedIn(false) && username}`); 
+0

güzel, etiketli şablonlara bakmamıştı – davnicwil

1

, ben daha güzel desen düşünüyorum:

Ben en iyi bahis boş değerler atar burada etiketli şablonu kullanmak olduğunu tahmin aslında, değişkeni şablondan çözme mantığını tamamen ayırmaktır.

İstediğiniz sözdizimini almanıza olanak tanır.

const username = isLoggedIn ? getUsername(): ''; 
const display = `hello${username && ' ' + username}` 

Veya, daha basit ama değişken biraz ile şablonun aralık/düzeni conflating ..

const username = isLoggedIn ? ' ' + getUsername() : ''; 
const display = `hello${username}` 

Bu tek liner değil, ama aslında çoğu durumda olması muhtemeldir olduğunu iyi bir şey.