Vue.js備忘記錄(四) vue過濾器文本格式化, 插槽 slot

一. vue過濾器 //文本格式化

Vue.js 允許你自定義過濾器,可被用于一些常見的文本格式化渗勘。

過濾器可以用在兩個地方:雙花括號插值和v-bind表達式

過濾器應該被添加在 JavaScript 表達式的尾部沐绒,由“管道”符號指示:

<!-- 在雙花括號中 -->
{{ message | capitalize }}

<!-- 在 `v-bind` 中 -->
<div v-bind:id="rawId | formatId"></div>

<!-- 過濾器可以串聯(lián) -->
{{ message | filterA | filterB }}

你可以在一個組件的選項中定義本地的過濾器:

filters: {
  capitalize: function (value) {
    if (!value) return ''
    value = value.toString()
    return value.charAt(0).toUpperCase() + value.slice(1)
  }
}

或者在創(chuàng)建 Vue 實例之前全局定義過濾器:

Vue.filter('capitalize', function (value) {
  if (!value) return ''
  value = value.toString()
  return value.charAt(0).toUpperCase() + value.slice(1)
})

new Vue({
  // ...
})

注意:過濾器的第一個參數(shù)已經(jīng)被規(guī)定死了,永遠都是 過濾器 管道符號前面的那個數(shù)據(jù)

二. 數(shù)組中的那些方法是響應式的?

我們知道,我們可以用v-for遍歷數(shù)組, 那么數(shù)組中那些方法是改變自身的?只有改變自身的方法才不用重新賦值吧

1.以下方法是響應式的

let arr =['a','b','c','d']
//1 push數(shù)組最后面添加元素
arr.push('e')

//2.pop刪除最后一個元素
arr.pop()

//3.shift刪除第一個元素
arr.shift()

//4.unshift 數(shù)組最前面添加元素
arr.unshift('e') 

//5.splice 刪除/插入/替換元素
arr.splice(2,1) //從2開始刪除1個
arr.splice(2,0,'f') //從2之后插入元素
arr.splice(2,1,'f') //替換2之后的元素(從2刪除1個元素,再添加一個元素)

//6.sort排序
arr.sort()

//7. reverse()反序
arr.reverse()

2.以下方法不是響應式的

通過索引值改變數(shù)組內(nèi)容不是響應式的

this.arr[2]='f'

如何解決?

this.arr.splice(2,1,'f')
//或者
Vue.set(this.arr,2,'f')     //vue方式

三. 插槽 slot

插槽的目的是提高組件的拓展性, 就像電腦的USB插槽.

解決子組件模板太過固化不靈活的問題,這時候我們給模板預備插槽

比如:

下面的例子,不同的導航欄存在區(qū)別,同時又有共性,

我們可以定義一個組件,這個組件里有三個插槽,每個插槽里都可以傳入不同的東西,這使得這個導航欄組件可以應用的更廣

這里我們的思想是: 抽取共性,保留插槽

1.插槽的基本使用

定義插槽<slot>默認值</slot>

    let template=`
    <div>
      <p>下面讓你自由發(fā)揮,你給我啥我顯示啥</p>
      <slot></slot>    <--這就是個插槽,里面的內(nèi)容由調(diào)用者決定  -->
    </div>

這樣子組件就有插槽了,父組件調(diào)用時可以往里面插入東西了

<子組件> 把要插入的內(nèi)容寫在這,可以是任何標簽 </子組件> 

2.具名插槽

<slot  name="left"></slot>  
<--這個插槽名叫l(wèi)eft  -->  <slot  name="center"></slot>

調(diào)用時: 要在插入的標簽中使用 slot="插槽名" 來插入

<子組件> <插入的標簽 slot="left"></插入的標簽> </子組件>

例:神還原上面 的京東截圖 ??


<!DOCTYPE html>
<html lang='en'>

<head>
  <meta charset='UTF-8'>
  <meta name='viewport' content='width=device-width, initial-scale=1.0'>
  <title>Document</title>
</head>

<body>
  <div id='app'>
    <cpn>
      <span slot="left">三</span>
      <span slot="center">JD<input type="text" placeholder="??這是一個搜索框"></span>
      <button slot="right">登錄</button>
    </cpn>
    <cpn><input slot="center" type="text" placeholder="??這是一個搜索框"></cpn>
    <cpn><strong slot="center">"購物車"</strong></cpn>
    <cpn>
      <table slot="center" style="display: inline-block;">
        <tr>
          <td> ??商品 </td>
          <td> 評價 </td>
          <td> 詳情 </td>
          <td> 推薦 </td>
        </tr>
      </table>
    </cpn>
    <cpn></cpn>
  </div>
  <script src='https://cdn.jsdelivr.net/npm/vue/dist/vue.js'></script>
  <script>

    let template = `
    <div>
      <slot name="left"><</slot>
      <slot name="center"><span>默認顯示一個span</span></slot>
      <slot name="right">...</slot>
    </div>
    `
    const cpn = {
      template,
    }
    const vm = new Vue({
      el: '#app',
      components: {
        cpn
      }
    })
  </script>
</body>

</html>

3. 作用域插槽

父組件通過作用域插槽拿到子組件數(shù)據(jù),但是按照父組件自己的方式展示

要做到這一點,我們要在子組件模板中聲明slot時 v-bind動態(tài)綁定數(shù)據(jù)源

在父組件調(diào)用時,標簽中加入slot-scope='slot' 來獲取slot標簽

然后用slot.data獲取數(shù)據(jù),用來展示

<!DOCTYPE html>
<html lang='en'>

<head>
  <meta charset='UTF-8'>
  <meta name='viewport' content='width=device-width, initial-scale=1.0'>
  <title>Document</title>
</head>

<body>
  <div id='app'>
    <cpn></cpn>
    <cpn>
      <div slot-scope='slot'>
        <span v-for="item in slot.data" >{{item}} - </span>       父組件的展示
      </div>
    </cpn>
  </div>
  <script src='https://cdn.jsdelivr.net/npm/vue/dist/vue.js'></script>
  <script>

    let template = `
    <div>   
    <slot :data='languages'>    //子組件用列表來展示
      <ul>
        <li v-for="language in languages" :key="language">{{language}}</li>
      </ul>
    </slot> 
    </div> 
    `
    const cpn = {
      template,
      data() {
        return {
          languages: ['c', "python", 'javascript', 'c#', 'DART', 'JAVA']
        }
      },
    }
    const vm = new Vue({
      el: '#app',
      components: {
        cpn
      }
    })
  </script>
</body>

</html>

4. 不要在插槽上直接設置class

<slot name="item-text" :class="{acticv:isActive}"></slot>
這種寫法不會起作用,
因為插槽是直接被替換成別的標簽了,
那個標簽替換它的時候不會關注到它里面的class

正確的寫法是:
<div :class="{acticv:isActive}">
  <slot name="item-text"></slot>
</div>
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市旺坠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖擂达,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件待侵,死亡現(xiàn)場離奇詭異,居然都是意外死亡璧疗,警方通過查閱死者的電腦和手機坯辩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來崩侠,“玉大人漆魔,你說我怎么就攤上這事∪匆簦” “怎么了改抡?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長僧家。 經(jīng)常有香客問我雀摘,道長,這世上最難降的妖魔是什么八拱? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任阵赠,我火速辦了婚禮,結(jié)果婚禮上肌稻,老公的妹妹穿的比我還像新娘清蚀。我一直安慰自己,他們只是感情好爹谭,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布枷邪。 她就那樣靜靜地躺著,像睡著了一般诺凡。 火紅的嫁衣襯著肌膚如雪东揣。 梳的紋絲不亂的頭發(fā)上践惑,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機與錄音嘶卧,去河邊找鬼尔觉。 笑死,一個胖子當著我的面吹牛芥吟,可吹牛的內(nèi)容都是我干的侦铜。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼钟鸵,長吁一口氣:“原來是場噩夢啊……” “哼钉稍!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起棺耍,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤贡未,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蒙袍,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體羞秤,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年左敌,在試婚紗的時候發(fā)現(xiàn)自己被綠了瘾蛋。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡矫限,死狀恐怖哺哼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情叼风,我是刑警寧澤取董,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站无宿,受9級特大地震影響茵汰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜孽鸡,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一蹂午、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧彬碱,春花似錦豆胸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春估盘,著一層夾襖步出監(jiān)牢的瞬間瓷患,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工遣妥, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留尉尾,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓燥透,卻偏偏與公主長得像,于是被迫代替她去往敵國和親辨图。 傳聞我的和親對象是個殘疾皇子班套,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354