Jadual Kandungan
我是helloworld中的插槽啊
name属性为left
name属性为right
{{slotProps.users.name}}
{{users.name}}
{{person.name}}
Rumah hujung hadapan web Soal Jawab bahagian hadapan Apakah masalah yang diselesaikan oleh slot vue?

Apakah masalah yang diselesaikan oleh slot vue?

Jan 13, 2023 pm 06:26 PM
vue slot

Masalah diselesaikan oleh slot vue: Kandungan tidak dibenarkan untuk ditulis di tengah-tengah teg sub-komponen yang diperkenalkan. Slot ialah keupayaan yang disediakan oleh Vue untuk pembungkus komponen; ia membenarkan pembangun untuk menentukan bahagian yang tidak pasti yang dijangka ditentukan oleh pengguna sebagai slot apabila slot pembungkusan boleh dianggap sebagai pemegang tempat untuk kandungan yang dikhaskan untuk pengguna .

Apakah masalah yang diselesaikan oleh slot vue?

Persekitaran pengendalian tutorial ini: sistem windows7, versi vue3, komputer DELL G3.

Apakah itu slot?

Kami tahu bahawa dalam vue, kandungan tidak dibenarkan untuk ditulis di tengah-tengah teg sub-komponen yang diperkenalkan. Bagi menyelesaikan masalah ini, pegawai tersebut memperkenalkan konsep slot. Slot

sebenarnya bersamaan dengan pemegang tempat. Ia memberikan templat HTML anda tempat dalam komponen, membolehkan anda menghantar beberapa perkara. Slot dibahagikan kepada slot tanpa nama, slot bernama dan slot berskop.

Anda mungkin tidak faham mengapa saya perlu menghantar HTML ke dalam subkomponen dan bukannya menulisnya terus dalam subkomponen? Jawapannya begini. Anda boleh bayangkan senario di mana anda mempunyai lima halaman Hanya satu kawasan daripada lima halaman mempunyai kandungan yang berbeza Bagaimana anda menulis lima halaman ini. Salin dan tampal adalah satu cara, tetapi dalam vue, slot adalah lebih baik.

Apakah masalah yang diselesaikan oleh slot vue?

Slot tanpa nama


Slot tanpa nama, kita boleh panggil slot tunggal atau slot lalai. Berbanding dengan slot yang dinamakan, ia tidak memerlukan atribut nama untuk ditetapkan. (Atribut nama tersembunyinya adalah lalai.)

Contoh:

Direktori fail adalah seperti berikut dan komponen Home ialah komponen induk HelloWorld.

Apakah masalah yang diselesaikan oleh slot vue?

  • Tulis slot tanpa nama dalam HelloWorld
<template>
  <div>
     Helloworld组件

     <div>
       <slot></slot>
     </div>

  </div>
</template>

<script>
export default {

}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style>
.hello{
  width:100%;
  height:300px;
  background:#ccc;
  margin-top:50px;
  .slotTxt{
    width:500px;
    height:200px;
    margin:30px auto;
    background:red;
  }
}
</style>
Salin selepas log masuk
  • Perkenalkan subkomponen ke dalam komponen Laman Utama dan Tulis kandungan dalam tag subkomponen
<template>
  <div>
    我是Home父组件
    <helloworld>
      <!-- 没有插槽,这里的内容不显示 -->
      <h1 id="我是helloworld中的插槽啊">我是helloworld中的插槽啊</h1>  
    </helloworld>
  </div>
</template>

<script>
import HelloWorld from &#39;@/components/HelloWorld.vue&#39;
export default {
  name: &#39;home&#39;,
  components: {
    HelloWorld
  }
}
</script>
Salin selepas log masuk

Kesan

Apakah masalah yang diselesaikan oleh slot vue?

Tidak sukar untuk melihat kandungan (bahagian merah) dalam HelloWorld tag mempunyai Ia menunjukkan.

Slot bernama


Seperti yang dinyatakan di atas, slot mempunyai atribut nama. Berbanding dengan slot tanpa nama, slot tanpa nama dengan atribut nama ditambah dinamakan slot.

  • Dalam komponen HelloWorld, tulis slot yang atribut namanya di kiri dan kanan masing-masing
<template>
  <div>
     Helloworld组件

     <div>
       <slot></slot>
     </div>

     <div>
       <slot></slot>
     </div>

  </div>
</template>

<script>
export default {

}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style>
.hello{
  width:700px;
  height:300px;
  background:#ccc;
  margin: 0 auto;
  margin-top:50px;
  .slotLeft{
    width:300px;
    height:200px;
    float:left;
    background:red;
  }
  .slotRight{
    width:300px;
    height:200px;
    float:right;
    background:pink;
  }
}
</style>
Salin selepas log masuk
  • Komponen rumah menulis slot-v pada templat: nama untuk menggunakan slot bernama
<template>
  <div>
    我是Home父组件
    <helloworld>
      <template>
         <h1 id="name属性为left">name属性为left</h1> 
      </template>
      <template>
         <h1 id="name属性为right">name属性为right</h1> 
      </template>
     
    </helloworld>
  </div>
</template>

<script>
import HelloWorld from &#39;@/components/HelloWorld.vue&#39;
export default {
  name: &#39;home&#39;,
  components: {
    HelloWorld
  }
}
</script>
<style>
.home{
  width:900px;
  margin:0 auto;
  background:yellow;
  padding-bottom:100px;
}
</style>
Salin selepas log masuk

Ambil perhatian bahawa slot v hanya boleh ditambah pada teg templat (dengan satu pengecualian).

  • Kesan

Apakah masalah yang diselesaikan oleh slot vue?

  • Pengecualian (slot tidak digunakan='name ')
    Slot bernama dengan atribut slot telah ditamatkan sejak 2.6.0 dan vue3.x telah ditamatkan sepenuhnya. Hanya cli sebelum vue3 boleh digunakan.
<template>
  <div>
    我是Home父组件
    <helloworld>
      <h1 id="name属性为left">name属性为left</h1>  
      <h1 id="name属性为right">name属性为right</h1>  
    </helloworld>
  </div>
</template>

<script>
import HelloWorld from &#39;@/components/HelloWorld.vue&#39;
export default {
  name: &#39;home&#39;,
  components: {
    HelloWorld
  }
}
</script>
<style>
.home{
  width:900px;
  margin:0 auto;
  background:yellow;
  padding-bottom:100px;
}
</style>
Salin selepas log masuk

Kesannya sama seperti di atas.

  • Sedikit pengetahuan tentang slot yang dinamakan
    Seperti v-on dan v-bind, v-slot juga mempunyai singkatan, iaitu menggantikan segala-galanya sebelum parameter (v-slot:) dengan aksara #. Contohnya v-slot:header boleh ditulis semula sebagai #header.

Slot Skop


Slot Skop sebenarnya adalah slot yang boleh menghantar data. Jika beberapa data dalam komponen anak hendak digunakan dalam komponen induk, ia mesti melalui kaedah yang ditentukan. Peraturan dicadangkan dalam dokumentasi rasmi bahawa semua kandungan dalam templat induk disusun dalam skop induk. Segala-galanya dalam templat kanak-kanak disusun dalam skop kanak-kanak. **Jika anda menggunakan nilai dalam komponen anak secara langsung dalam komponen induk, ralat akan dilaporkan.

Slot skop slot tanpa nama

Untuk menjadikan data dalam komponen anak tersedia dalam kandungan slot ibu bapa, kami boleh menghantar data sebagai Bind a elemen ciri:

语法:v-bind:users="user"
Salin selepas log masuk
  • Kod HelloWorld subkomponen
<template>
  <div>
     Helloworld组件  
     <div>
       <slot></slot>
     </div> 
     
  </div>
</template>

<script>
export default {
  data(){
    return{
      user:{
        name:&#39;oralinge&#39;,
        age:18
      }
    }  
  }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style>
.hello{
  width:700px;
  height:300px;
  background:#ccc;
  margin: 0 auto;
  margin-top:50px;
  .slotLeft{
    width:300px;
    height:200px;
    // float:left;
    background:red;
    margin:20px auto
  }
  .slotRight{
    width:300px;
    height:200px;
    float:right;
    background:pink;
  }
}
</style>
Salin selepas log masuk

Ciri yang terikat pada elemen (v-bind:users="user ") dipanggil penyangga slot. Sekarang dalam skop induk, kita boleh menggunakan v-slot dengan nilai untuk menentukan nama prop slot yang kami sediakan.

语法:v-slot:default="随意取的名字"  // default可省略,简写为v-slot="随意取的名字"
Salin selepas log masuk
  • Kod Laman Utama komponen induk
<template>
  <div>
    我是Home父组件
    <helloworld>
      <template>
         <h1 id="slotProps-users-name">{{slotProps.users.name}}</h1> 
      </template>
    </helloworld>
  </div>
</template>

<script>
import HelloWorld from &#39;@/components/HelloWorld.vue&#39;
export default {
  name: &#39;home&#39;,
  components: {
    HelloWorld
  }
}
</script>
<style>
.home{
  width:900px;
  margin:0 auto;
  background:yellow;
  padding-bottom:100px;
}
</style>
Salin selepas log masuk
Salin selepas log masuk

Nota:
SlotProps dalam komponen induk boleh dipilih sesuka hati.
Pengguna dalam subkomponen dipilih sesuka hati, sepadan dengan pengguna dalam komponen induk.
Pengguna dalam subkomponen ialah data.

Kesan

Apakah masalah yang diselesaikan oleh slot vue?

Slot skop slot yang dinamakan

adalah sama dengan slot tanpa nama, hanya Anda perlu menggantikan lalai dengan nilai nama slot.

  • Kod HelloWorld komponen kanak-kanak
<template>
  <div>
     Helloworld组件  
     <div>
       <slot></slot>
     </div> 
     
  </div>
</template>

<script>
export default {
  data(){
    return{
      user:{
        name:&#39;hello world&#39;,
        age:18
      }
    }  
  }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style>
.hello{
  width:700px;
  height:300px;
  background:#ccc;
  margin: 0 auto;
  margin-top:50px;
  .slotLeft{
    width:300px;
    height:200px;
    // float:left;
    background:red;
    margin:20px auto
  }
  .slotRight{
    width:300px;
    height:200px;
    float:right;
    background:pink;
  }
}
</style>
Salin selepas log masuk
Salin selepas log masuk
  • Kod Laman Utama komponen induk
<template>
  <div>
    我是Home父组件
    <helloworld>
      <template>
         <h1 id="slotProps-users-name">{{slotProps.users.name}}</h1> 
      </template>
    </helloworld>
  </div>
</template>

<script>
import HelloWorld from &#39;@/components/HelloWorld.vue&#39;
export default {
  name: &#39;home&#39;,
  components: {
    HelloWorld
  }
}
</script>
<style>
.home{
  width:900px;
  margin:0 auto;
  background:yellow;
  padding-bottom:100px;
}
</style>
Salin selepas log masuk
Salin selepas log masuk

Kesan

Apakah masalah yang diselesaikan oleh slot vue?

注意:
     默认插槽的缩写语法不能和具名插槽混用,因为它会导致作用域不明确。

Apakah masalah yang diselesaikan oleh slot vue?

另,slot-scope写法在2.6之后已废弃,作用与上面相同,在此不做解释。

上面的写法是不是觉得有些麻烦?别着急,我们来看一看解构插槽 Prop

解构插槽 Prop

作用域插槽的内部工作原理是将你的插槽内容包括在一个传入单个参数的函数里:

function (slotProps) {
  // 插槽内容
}
Salin selepas log masuk

这意味着 v-slot 的值实际上可以是任何能够作为函数定义中的参数的 JavaScript 表达式。所以在支持的环境下 (单文件组件或现代浏览器),你也可以使用 ES2015 解构来传入具体的插槽 prop。

语法:v-slot="{ users }"
Salin selepas log masuk
  • HelloWold组件
<template>
  <div>
     Helloworld组件  
     <div>
       <slot></slot>
     </div> 
     
  </div>
</template>

<script>
export default {
  data(){
    return{
      user:{
        name:&#39;hello world&#39;,
        age:18
      }
    }  
  }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style>
.hello{
  width:700px;
  height:300px;
  background:#ccc;
  margin: 0 auto;
  margin-top:50px;
  .slotLeft{
    width:300px;
    height:200px;
    // float:left;
    background:red;
    margin:20px auto
  }
  .slotRight{
    width:300px;
    height:200px;
    float:right;
    background:pink;
  }
}
</style>
Salin selepas log masuk
Salin selepas log masuk
  • Home组件
<template>
  <div>
    我是Home父组件
    <helloworld>
      <template>
         <h1 id="users-name">{{users.name}}</h1> 
      </template>
    </helloworld>
  </div>
</template>

<script>
import HelloWorld from &#39;@/components/HelloWorld.vue&#39;
export default {
  name: &#39;home&#39;,
  components: {
    HelloWorld
  }
}
</script>
<style>
.home{
  width:900px;
  margin:0 auto;
  background:yellow;
  padding-bottom:100px;
}
</style>
Salin selepas log masuk
Salin selepas log masuk
  • 效果

Apakah masalah yang diselesaikan oleh slot vue?

  • 重命名----更改users这个名字
<template>
  <div>
    我是Home父组件
    <helloworld>
      <template>
         <h1 id="person-name">{{person.name}}</h1> 
      </template>
    </helloworld>
  </div>
</template>

<script>
import HelloWorld from &#39;@/components/HelloWorld.vue&#39;
export default {
  name: &#39;home&#39;,
  components: {
    HelloWorld
  }
}
</script>
<style>
.home{
  width:900px;
  margin:0 auto;
  background:yellow;
  padding-bottom:100px;
}
</style>
Salin selepas log masuk

效果如上图。

  • 定义后备内容,用于插槽 prop 是 undefined 的情形
    此处按照官方文档的写法会出现语法报错,后期应该会修复(有知道的麻烦通知一声)。
<template>
  <div>
    我是Home父组件
    <helloworld>
      <template>
         <h1 id="users-name">{{users.name}}</h1> 
      </template>
    </helloworld>
  </div>
</template>

<script>
import HelloWorld from &#39;@/components/HelloWorld.vue&#39;
export default {
  name: &#39;home&#39;,
  components: {
    HelloWorld
  }
}
</script>
<style>
.home{
  width:900px;
  margin:0 auto;
  background:yellow;
  padding-bottom:100px;
}
</style>
Salin selepas log masuk
Salin selepas log masuk

使用场景


  • 复用公共组件
    代码示例如下:
<template>
  <div>
    <div>
      <span>{{title}}</span>
      <div>
        <slot></slot>
      </div>
    </div>
    <div>
      <slot></slot>
    </div>
  </div>
</template>
<script>
export default {
  data () {
    return {
    }
  },
  props: {
    title: {
      type: String,
      required: true
    }
  }
}
</script>
<style>
.title-box {
  padding: 16px 0;
  border-bottom: 1px solid #eff1f5;
  .title {
    font-family: MicrosoftYaHei;
    font-size: 24px;
    color: #283039;
    letter-spacing: 0;
    line-height: 24px;
    &::before {
      width: 4px;
      margin-right: 20px;
      content: "";
      background-color: #5da1ff;
      display: inline-block;
      height: 20px;
      vertical-align: middle;
    }
  }
  .right {
    float: right;
    margin-right: 20px;
  }
}
</style>
Salin selepas log masuk

使用的ui框架为ivew。

相关推荐:vue.js视频教程

Atas ialah kandungan terperinci Apakah masalah yang diselesaikan oleh slot vue?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara menambah fungsi ke butang untuk vue Cara menambah fungsi ke butang untuk vue Apr 08, 2025 am 08:51 AM

Anda boleh menambah fungsi ke butang VUE dengan mengikat butang dalam templat HTML ke kaedah. Tentukan kaedah dan tulis logik fungsi dalam contoh Vue.

Cara merujuk fail js dengan vue.js Cara merujuk fail js dengan vue.js Apr 07, 2025 pm 11:27 PM

Terdapat tiga cara untuk merujuk kepada fail JS dalam vue.js: Secara langsung tentukan jalan menggunakan & lt; skrip & gt; tag ;; import dinamik menggunakan cangkuk kitaran hayat yang dipasang (); dan mengimport melalui Perpustakaan Pengurusan Negeri VUEX.

Cara Menggunakan Watch di Vue Cara Menggunakan Watch di Vue Apr 07, 2025 pm 11:36 PM

Pilihan Watch di Vue.js membolehkan pemaju mendengar perubahan dalam data tertentu. Apabila data berubah, tontonkan mencetuskan fungsi panggil balik untuk melakukan paparan kemas kini atau tugas lain. Pilihan konfigurasinya termasuk segera, yang menentukan sama ada untuk melaksanakan panggilan balik dengan serta -merta, dan mendalam, yang menentukan sama ada untuk mendengarkan secara rekursif terhadap objek atau tatasusunan.

Cara menggunakan bootstrap di vue Cara menggunakan bootstrap di vue Apr 07, 2025 pm 11:33 PM

Menggunakan bootstrap dalam vue.js dibahagikan kepada lima langkah: Pasang bootstrap. Import bootstrap di main.js. Gunakan komponen bootstrap secara langsung dalam templat. Pilihan: Gaya tersuai. Pilihan: Gunakan pemalam.

Cara kembali ke halaman sebelumnya oleh Vue Cara kembali ke halaman sebelumnya oleh Vue Apr 07, 2025 pm 11:30 PM

Vue.js mempunyai empat kaedah untuk kembali ke halaman sebelumnya: $ router.go (-1) $ router.back () menggunakan & lt; router-link to = & quot;/& quot; Komponen Window.History.Back (), dan pemilihan kaedah bergantung pada tempat kejadian.

Vue menyedari kesan menatal marquee/teks Vue menyedari kesan menatal marquee/teks Apr 07, 2025 pm 10:51 PM

Melaksanakan kesan menatal marquee/teks di VUE, menggunakan animasi CSS atau perpustakaan pihak ketiga. Artikel ini memperkenalkan cara menggunakan animasi CSS: Buat teks tatal dan bungkus teks dengan & lt; div & gt;. Tentukan animasi CSS dan tetapkan limpahan: tersembunyi, lebar, dan animasi. Tentukan frasa key, set Transform: TranslateX () pada permulaan dan akhir animasi. Laraskan sifat animasi seperti tempoh, kelajuan tatal, dan arah.

Cara Menanyakan Versi Vue Cara Menanyakan Versi Vue Apr 07, 2025 pm 11:24 PM

Anda boleh menanyakan versi VUE dengan menggunakan Vue Devtools untuk melihat tab VUE dalam konsol penyemak imbas. Gunakan NPM untuk menjalankan arahan "NPM LIST -G VUE". Cari item VUE dalam objek "Dependencies" fail Package.json. Untuk projek Vue CLI, jalankan perintah "Vue -version". Semak maklumat versi di & lt; skrip & gt; Tag dalam fail HTML yang merujuk kepada fail VUE.

Cara Menggunakan Fungsi Memintas Vue Cara Menggunakan Fungsi Memintas Vue Apr 08, 2025 am 06:51 AM

Pemintasan fungsi dalam VUE adalah teknik yang digunakan untuk mengehadkan bilangan kali fungsi dipanggil dalam tempoh masa yang ditentukan dan mencegah masalah prestasi. Kaedah pelaksanaan adalah: mengimport perpustakaan lodash: import {debounce} dari 'lodash'; Gunakan fungsi debounce untuk membuat fungsi memintas: const debouncedfunction = debounce (() = & gt; { / logical /}, 500); Panggil fungsi Intercept, dan fungsi kawalan dipanggil paling banyak sekali dalam 500 milisaat.

See all articles