javascript - vue模板中變量非真時的默認值
問題描述
問題描述:
<template> <p><section>{{x.a}}</section><section>{{x.b}}</section><section>{{x.c}}</section> </p></template><script> export default {name:'xx',data(){ return {x:{ a:'foo', b:null, c:null} }} }</script>
渲染出來為
<p> <section>foo</section> <section></section> <section></section></p>
期望的效果:希望在變量非真時有全局默認值,比如'--'
我的嘗試
<template> <p><section>{{x.a||'--'}}</section><section>{{x.b||'--'}}</section><section>{{x.c||'--'}}</section> </p></template>
這樣雖然可以達到效果 但是太累。每個都要寫一筆。為了偷懶 我改造了一下
<template> <p><section>{{showX('a')}}</section><section>{{showX('b')}}</section><section>{{showX('c')}}</section> </p></template><script> export default {name:'xx',data(){ return {x:{ a:'foo', b:null, c:null} }},methods:{ showX:function(key){const value = this.x[key];return !!value?value:'--'; }} }</script>
想得到的幫助:但是,上述寫法還是覺得不夠方便。有沒有什么辦法 使我可以在模板里還是寫<section>{{x.a}}</section> 當其值非真時渲染成'--' ,前提是不要污染原始數(shù)據(jù)x
問題解答
回答1:可以用 filter 來實現(xiàn)這個效果:
new Vue({ data: { message: ’’ }, filters: { e (str) { return str || ’--’ } }})
{{ message | e }}
如果還覺得太麻煩,可以用比較黑科技的手段:
var _s = Vue.prototype._sVue.prototype._s = function (s) { return _s.call(this, s || ’--’)}
解釋一下,_s 是 Vue 的內(nèi)部屬性,模版中的每一個文本節(jié)點都會被這個方法處理,將返回值進行渲染,由于是內(nèi)部屬性,所以在版本更新時不能保證穩(wěn)定性,這點要注意。附上 Demo:https://codepen.io/cool_zjy/p...
回答2:可以運用三目運算符吧,
{{x.a?x.a:’--’}}
這個就是相當于一個if判斷語句,
回答3:提供個人思路吧,在于你在什么地方去修改data中的x值:
在created時修改,那么直接在修改的地方使用你第一種使用過的短路運算就足夠了
如果是初始化視圖后再修改,那么就設(shè)置你的初始為 ’--’, 不就可以嗎?
相關(guān)文章:
1. javascript - 微信網(wǎng)頁開發(fā)從菜單進入頁面后,按返回鍵沒有關(guān)閉瀏覽器而是刷新當前頁面,求解決?2. mysql replace 死鎖3. android - 安卓做前端,PHP做后臺服務(wù)器 有什么需要注意的?4. mysql - ubuntu開啟3306端口失敗,有什么辦法可以解決?5. 求救一下,用新版的phpstudy,數(shù)據(jù)庫過段時間會消失是什么情況?6. extra沒有加載出來7. python3.x - Python not 運算符的問題8. python - 數(shù)據(jù)與循環(huán)次數(shù)對應(yīng)不上9. mysql - C#連接數(shù)據(jù)庫時一直這一句出問題int i = cmd.ExecuteNonQuery();10. python小白,關(guān)于函數(shù)問題
