最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue2.0 slot分發(fā)內(nèi)容與props驗(yàn)證的方法

 更新時(shí)間:2017年12月12日 09:23:39   作者:范小飯_  
本篇文章主要介紹了Vue2.0 slot分發(fā)內(nèi)容與props驗(yàn)證的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

使用一種方式混合父組件的內(nèi)容與子組件自己的模板,這個(gè)過程被稱為“內(nèi)容分發(fā)”。在子組件中使用特殊的<slot>元素作為內(nèi)容的插槽。

Slot分發(fā)內(nèi)容

概述:

簡單來說,假如父組件需要在子組件內(nèi)放一些DOM,那么這些DOM是顯示、不顯示、在哪個(gè)地方顯示、如何顯示,就是slot分發(fā)負(fù)責(zé)的活。

默認(rèn)情況下

父組件在子組件內(nèi)套的內(nèi)容,是不顯示的。

例如代碼:

<div id="app"> 
  <children> 
    <span>12345</span> 
    <!--上面這行不會(huì)顯示--> 
  </children> 
</div> 
<script> 
  var vm = new Vue({ 
    el: '#app', 
    components: { 
      children: {  //這個(gè)無返回值,不會(huì)繼續(xù)派發(fā) 
        template: "<button>為了明確作用范圍,所以使用button標(biāo)簽</button>" 
      } 
    } 
  }); 
</script> 

顯示內(nèi)容是一個(gè)button按鈕,不包含span標(biāo)簽里面的內(nèi)容;

一、單個(gè)slot

在子組件模板中有slot標(biāo)簽,被視為備用內(nèi)容,在父組件不提供內(nèi)容的情況下使用。如果父組件提供內(nèi)容,則把整個(gè)內(nèi)容片段插入到slot所在的DOM位置,并替換掉slot標(biāo)簽本身。

子組件模板中沒有slot標(biāo)簽,父組件提供的內(nèi)容會(huì)被拋棄

如果替換的內(nèi)容較多,可以直接用一個(gè)template替換。

<div id="app">
  <h2>自定義組件</h2>
  <custom>
   <!-- 當(dāng)卸載自定義標(biāo)簽之前的內(nèi)容,要混合子組件中的模板 -->
   <div>我是父組件提供的內(nèi)容,我的存在會(huì)替換子組件中slot標(biāo)簽內(nèi)的內(nèi)容</div> 
  </custom>
</div>
<script type="text/javascript" src='https://i0.jrjimg.cn/zqt-red-1000/focus/focus2017YMZ/teamFrighting/js/vue.min.js'></script>
<script>
 Vue.component('custom',{
  template:`
   <div>
    <slot>
     <div>我備用內(nèi)容,如果子組件中有內(nèi)容會(huì)替換我哦~</div>
    </slot>
   </div>
  `
 })
 new Vue({
  el:"#app"
 })
</script>

見證奇跡的時(shí)候到了,頁面上會(huì)顯示如下內(nèi)容

 

單個(gè)slot.png

二、有具體名稱的slot

<slot>元素可以用一個(gè)特殊的屬性name來配置如何分發(fā)內(nèi)容。

<div id="app">
  <h2>自定義組件</h2>
  <custom>
   <!-- <div slot="one">我替換one</div> -->
   <div slot="three">我替換three</div>
   <div slot="two">我替換two</div>
   <span slot="two">我替換two</span>
   <div slot="one">我替換one</div>
  </custom>
</div>
<script type="text/javascript" src='https://i0.jrjimg.cn/zqt-red-1000/focus/focus2017YMZ/teamFrighting/js/vue.min.js'></script>
<script>
 Vue.component('custom',{
  template:`
   <div>
    <slot name="one"> 
     <p>我是one</p>
    </slot>
    <slot name="two">
     <p>我是two</p>
    </slot>
    <slot name="three">
     <p>我是three</p>
    </slot>
   </div>
  `
 })
 new Vue({
  el:"#app"
 })
</script>

你猜頁面上會(huì)顯示什么?猜對(duì)了我就告訴你-。-

 

具名slot.png

是不是被順序驚到了,這是因?yàn)轫撁鏁?huì)根據(jù)子組件中slot的順序去替換內(nèi)容并渲染頁面。

可以使用一個(gè)匿名的slot,處理那些沒有對(duì)應(yīng)slot的內(nèi)容

 <div id="app">
  <h2>自定義組件</h2>
  <custom>
   <!-- <div slot="one">我替換one</div> -->
   <div slot="three">我替換three</div>
   <div slot="two">我替換two</div>
   <span slot="two">我替換two</span>
   <div slot="one">我替換one</div>
   <div>替換無名的slot</div>
   <div>替換無名的slot</div>
   <div>替換無名的slot</div>
  </custom>
 </div>
<script type="text/javascript" src='https://i0.jrjimg.cn/zqt-red-1000/focus/focus2017YMZ/teamFrighting/js/vue.min.js'></script>
<script>
 Vue.component('custom',{
  template:`
   <div>
    <slot name="one"> 
     <p>我是one</p>
    </slot>
    <slot name="two">
     <p>我是two</p>
    </slot>
    <slot name="three">
     <p>我是three</p>
    </slot>
    <slot>
     <p>我是無名的slot</p>
    </slot>
   </div>
  `
 })
 new Vue({
  el:"#app"
 })
</script>

匿名的slot就會(huì)被那些沒有對(duì)應(yīng)slot的內(nèi)容替換。

 

匿名slot.png

三、編譯作用域

父組件模板的內(nèi)容在父組件作用域內(nèi)編譯

子組件模板的內(nèi)容在子組件作用域內(nèi)編譯

<div id="app">
  <h2>自定義組件</h2>
  <custom>
   <!-- 渲染的數(shù)據(jù),是父組件中的數(shù)據(jù),如果想使用子組件中的數(shù)據(jù),就在子組件中建立自己的數(shù)據(jù) -->
   {{message}}
  </custom>
</div>
<script type="text/javascript" src='https://i0.jrjimg.cn/zqt-red-1000/focus/focus2017YMZ/teamFrighting/js/vue.min.js'></script>
<script>
 Vue.component('custom',{
  data(){
   return {
    message:"我是子組件的數(shù)據(jù)"
   }
  },
  template:`
   <div>
    <p>我是{{message}}</p>
    <slot>
    // 這的內(nèi)容會(huì)被父組件中內(nèi)容替換
     <p> {{message}}</p>
    </slot>
   </div>
  `
 })
 new Vue({
  el:"#app",
  data:{
   message:"我是父組件的數(shù)據(jù)"
  }
 })
</script>

頁面渲染

 

編譯作用域.png

運(yùn)用了slot分發(fā),使我們對(duì)組件的應(yīng)用更加靈活。

單向數(shù)據(jù)流

數(shù)據(jù)從父組件傳遞給子組件,只能單項(xiàng)綁定。

在子組件內(nèi)不應(yīng)該修改父組件傳遞過來的數(shù)據(jù)。

改變prop的情況:

1.作為data中局部數(shù)據(jù)的初始值使用

2.作為子組件中computed屬性

props 驗(yàn)證

我們?cè)诟附M件給子組件傳值得時(shí)候,為了避免不必要的錯(cuò)誤,可以給prop的值進(jìn)行類型設(shè)定,讓父組件給子組件傳值得時(shí)候,更加準(zhǔn)確

  props:{
  propA:Number, 數(shù)值類型
  propB:[String,Number], 多種類型
  propC:{type:String,required:true}, 必填項(xiàng)
  propD:{type:Number,default:100}, 默認(rèn)是
  propE:{typr:Number,default:function(){return 1000}}
  propF:{validator:function(value){return value>2}} 符合value>2的值
  }

不明白,看如下案例,要求父組件給子組件傳值得時(shí)候

1、這個(gè)參數(shù)是必須傳的

2、值必須是數(shù)值類型的

3、默認(rèn)參數(shù)是10

 Vue.component('custom-cmpontent',{
  data(){
   return {
    incrementCount:this.count //作為局部組件的data的初始值
   }
  },
  props:{
   count:{
    type:Number, // 類型
    default:10, // 默認(rèn)值
    required:true //必須要傳參數(shù)
   }
  },
  computed:{
   incrementCount2(){
    return this.incrementCount
   }
  },
  template:`
    <div>
     <h2>我是一個(gè)自定義組件</h2>
     <input type='button' value="改變count的值" @click="changeCount">
     {{incrementCount}}
    </div>
  `,
  methods:{
   changeCount:function(value){
    this.incrementCount++;
    this.$emit('receive')
   }
  }
 })
 new Vue({
  el:"#app",
  data:{
   count:0
  },
  methods:{
   countH:function(){
    this.count++;
   }
  }
 })

那如果我們給子組件傳值得時(shí)候,傳過去的是一個(gè)字符串,就會(huì)報(bào)錯(cuò)

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 解決vue 局部過濾器獲取不到this的問題

    解決vue 局部過濾器獲取不到this的問題

    這篇文章主要介紹了解決vue 局部過濾器獲取不到this的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Vue滑塊驗(yàn)證碼組件anji-captcha的使用案例詳解

    Vue滑塊驗(yàn)證碼組件anji-captcha的使用案例詳解

    滑塊驗(yàn)證是一種常見的人機(jī)識(shí)別方法,這篇文章主要介紹了Vue滑塊驗(yàn)證碼組件anji-captcha的使用,本文通過實(shí)例代碼圖文相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • 使用Vue開發(fā)一個(gè)實(shí)時(shí)性時(shí)間轉(zhuǎn)換指令

    使用Vue開發(fā)一個(gè)實(shí)時(shí)性時(shí)間轉(zhuǎn)換指令

    我們就來實(shí)現(xiàn)這樣一個(gè)Vue自定義指令v-time,將表達(dá)式傳入的時(shí)間戳實(shí)時(shí)轉(zhuǎn)換為相對(duì)時(shí)間。下面小編給大家?guī)砹耸褂肰ue開發(fā)一個(gè)實(shí)時(shí)性時(shí)間轉(zhuǎn)換指令,需要的朋友參考下吧
    2018-01-01
  • 使用Vue組件實(shí)現(xiàn)一個(gè)簡單彈窗效果

    使用Vue組件實(shí)現(xiàn)一個(gè)簡單彈窗效果

    這篇文章主要介紹了使用Vue組件實(shí)現(xiàn)一個(gè)簡單彈窗效果,本文主要內(nèi)容會(huì)涉及到彈窗遮罩的實(shí)現(xiàn), slot 插槽的使用方式,props 、 $emit 傳參,具體組件代碼也傳上去了。需要的朋友可以參考下
    2018-04-04
  • Vue 讀取HTMLCollection列表的length為0問題

    Vue 讀取HTMLCollection列表的length為0問題

    這篇文章主要介紹了Vue 讀取HTMLCollection列表的length為0問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 淺談Vue項(xiàng)目骨架屏注入實(shí)踐

    淺談Vue項(xiàng)目骨架屏注入實(shí)踐

    這篇文章主要介紹了淺談Vue項(xiàng)目骨架屏注入實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Vue中組件的數(shù)據(jù)共享分析講解

    Vue中組件的數(shù)據(jù)共享分析講解

    本文章向大家介紹vue組件中的數(shù)據(jù)共享,主要包括vue組件中的數(shù)據(jù)共享使用實(shí)例、應(yīng)用技巧、基本知識(shí)點(diǎn)總結(jié)和需要注意事項(xiàng),具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-12-12
  • Vue使用konva實(shí)現(xiàn)一個(gè)簡便的流程圖

    Vue使用konva實(shí)現(xiàn)一個(gè)簡便的流程圖

    日常開發(fā)中我們可能碰到流程圖的需求,實(shí)現(xiàn)流程圖的庫有很多,如果我們想要實(shí)現(xiàn)一個(gè)簡便的流程圖可以使用konva庫來實(shí)現(xiàn),下面我們就來看一下具體的實(shí)現(xiàn)過程,需要的朋友可以參考下
    2023-08-08
  • vxe-list?vue?如何實(shí)現(xiàn)下拉框的虛擬列表

    vxe-list?vue?如何實(shí)現(xiàn)下拉框的虛擬列表

    這篇文章主要介紹了vxe-list?vue?如何實(shí)現(xiàn)下拉框的虛擬列表,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 基于vue.js 2.x的虛擬滾動(dòng)條的示例代碼

    基于vue.js 2.x的虛擬滾動(dòng)條的示例代碼

    本篇文章主要介紹了基于vue.js 2.x的虛擬滾動(dòng)條的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-01-01

最新評(píng)論

贺兰县| 金湖县| 会同县| 逊克县| 闸北区| 应用必备| 弥勒县| 洪洞县| 睢宁县| 山阴县| 蚌埠市| 休宁县| 克东县| 石林| 尖扎县| 历史| 通山县| 沾化县| 光泽县| 日喀则市| 宜州市| 巢湖市| 邳州市| 双流县| 铁岭市| 渑池县| 区。| 邵阳市| 乃东县| 石城县| 七台河市| 瑞金市| 云和县| 息烽县| 彭山县| 九龙县| 略阳县| 武定县| 陆川县| 五华县| 枣庄市|