首頁 web前端 Vue.js vuejs slot 怎麼用

vuejs slot 怎麼用

Sep 24, 2021 pm 02:34 PM
vue.js

vuejs slot的使用方法:1、在子元件內放一些DOM;2、透過slot實作顯示或隱藏DOM,程式碼如「new Vue({el: "#app",data: {} ,components:{children:{...}}}) 」。

vuejs slot 怎麼用

本文操作環境:Windows7系統、vue2.9.6版,DELL G3電腦。

vuejs中slot的使用

概述:

假如父元件需要在子元件內放一些DOM,那麼這些DOM是顯示或隱藏,在哪個地方顯示,怎麼顯示,需要slot分發負責。

分成以下幾種情況分發:


<p>
    <children>
      <span>我是slot内容</span>   <!--这行不会显示-->
    </children>
  </p>
  <script>
    new Vue({
      el: "#app",
      data: {
      },
      components: {
        children: { //这个无返回值,不会继续派发          
        template: "<button>为了明确作用范围,所以使用button标签"
        }
      }
    })  </script>
登入後複製

顯示結果為:span標籤內的內容並沒有顯示。

 單一slot:


<p>
    <children>
      <span>我是slot内容</span>
      <!--这行不会显示-->
    </children>
  </p>
  <script>
    new Vue({
      el: "#app",
      data: {
      },
      components: {
        children: { //这个无返回值,不会继续派发          
        template: "<button><slot>为了明确作用范围,所以使用button标签"
        }
      }
    })  </script>
登入後複製


vuejs slot 怎麼用

vuejs slot 怎麼用

vuejs slot 怎麼用

vuejs slot 怎麼用

vuejs slot 怎麼用

vuejs slot 怎麼用

vuejs slot 怎麼用

vuejs slot 怎麼用

即父组件放在子组件里的内容,插到了子组件<slot></slot>位置;
注意:即使有多个标签,会一起被插入,相当于在父组件放在子组件里的标签,替换了<slot></slot>这个标签。
例如:<p>
    <children>
      <span>我是slot内容</span>
      <p>测试测试</p>
      <em>我是测试的</em>
      <!--这行不会显示-->
    </children>
  </p>
  <script>
    new Vue({
      el: "#app",
      data: {

      },
      components: {
        children: { //这个无返回值,不会继续派发          template: "<button><slot>为了明确作用范围,所以使用button标签"
        }
      }
    })  </script>
登入後複製

vuejs slot 怎麼用

D:具名slot:将放在子组件里的不同html标签放到不同位置,父组件在要发布的标签里添加slot=”name名”属性,子组件在对应分发的位置的slot标签里,添加name=”name名”属性,然后就会将对应的标签放在对应位置了。
例如:<p>
    <children>
      <span>12345</span>
      <span>56789</span>
    </children>
  </p>
  <script>
    new Vue({
      el: "#app",
      data: {
      },
      components: {
        children: { //这个无返回值,不会继续派发          template: "<button><slot name=&#39;first&#39;>为了明确作用范围<slot name=&#39;third&#39;>所以使用button标签"
        }
      }
    })  </script>
登入後複製


#

E:分发内容的作用域:
被分发的内容的作用域,根据其所在模块决定,例如:<p>
    <children>
      <span>12345</span>
      <span>56789</span>
    </children>
  </p>
  <script>
    new Vue({
      el: "#app",
      data: {
      },
      components: {
        children: { //这个无返回值,不会继续派发          template: "<button><slot name=&#39;first&#39;>为了明确作用范围<slot name=&#39;third&#39;>所以使用button标签"
        }
      },
      methods: {
        test: function() {
          console.log("我是first点击打印的内容");
        }
      }
    })  </script>点击按钮12345的区域时(而不是全部按钮),会触发父组件的test方法,然后打印“我是first点击打印的内容”。但是点击其他区域则没有影响。
登入後複製

vuejs slot 怎麼用

F:当没有分发内容时的提示:假如父组件没有在子组件中放置有标签,或者是父组件在子组件中放置标签,但有slot属性,而子组件中没有slot属性的标签。那么子组件的slot标签,将不会起任何作用。除非,该slot标签内有内容,那么在无分发内容的时候,会显示该slot标签内的内容。
例如:<p>
    <children>
      <span>【12345】</span>
    </children>
  </p>
  <script>
    new Vue({
      el: "#app",
      data: {
      },
      components: {
        children: { //这个无返回值,不会继续派发          template: "<p><slot name=&#39;first&#39;><button>【没内容显示1】为了明确作用范围,<slot name=&#39;last&#39;><button>【没内容显示2】所以使用button标签"
        }
      }
    })  </script>
登入後複製


如果改为:<p>
    <children>
      <span>【12345】</span>
    </children>
  </p>
  <script>
    new Vue({
      el: "#app",
      data: {
      },
      components: {
        children: { //这个无返回值,不会继续派发          template: "<p><slot name=&#39;first&#39;><button>【没内容显示1】为了明确作用范围,<slot name=&#39;last&#39;><button>【没内容显示2】所以使用button标签"
        }
      }
    })  </script>
登入後複製
######
说明:a、name=”first”的slot标签被父组件对应的标签所替换(slot标签内部的内容被舍弃)
b、name=”last”的slot标签,因为没有对应内容,则显示该slot标签内部的内容。

G、假如想控制子组件根标签的属性【1】首先,由于模板标签是属于父组件的,因此,将子组件的指令绑定在模板标签里,是不可以的(因为其归属于父组件)
【2】假如需要通过父组件控制子组件是否显示(例如v-show或v-if),那么这个指令显然是属于父组件的,可以将标签写在子组件的模板上。例如:<p>
    <button>点击让子组件显示</button>
    <children></children>
  </p>
  <script>
    new Vue({
      el: "#app",
      data: {
        abc: false
      },
      methods: {
        toshow: function() {          this.abc = !this.abc;
        }
      },
      components: {
        children: { //这个无返回值,不会继续派发          template: "<p>这里是子组件"
        }
      }
    })  </script>
登入後複製
#########
点击之后:
登入後複製
##########
说明:通过父组件(点击按钮,切换v-if指令的值)控制子组件是否显示。
【3】假如需要通过子组件,控制子组件是否显示(比如隐藏)那么这个指令显然是属于子组件的(会将值放在子组件的data属性下)那么就必须放置在子组件的根标签中。
例如:<p>
    <button>点击让子组件显示</button>
    <children>
      <span>【12345】</span>
      <!--上面这行不会显示-->
    </children>
  </p>

  <script>
    new Vue({
      el: "#app",
      methods: {
        toshow: function() {          this.$children[0].tohidden = true;
        }
      },
      components: {
        children: { //这个无返回值,不会继续派发          template: "<p v-if=&#39;tohidden&#39; @click=&#39;tohide&#39;>这里是子组件",
          data: function() {            return {
              tohidden: true
            }
          },
          methods: {
            tohide: function() {              this.tohidden = !this.tohidden;
            }
          }
        }
      }
    })  </script>
登入後複製
############點擊「這裡是子元件」之後:###############點選「點選讓子元件顯示」:###說明:#########點擊子元件會讓子元件消失# ##點選父元件的按鈕,透過更改子元件的tohidden屬性,讓子元件重新顯示。 ###子元件的指令綁定在子元件的模板之中(如此才能呼叫)。 ######推薦學習:《###vue教學###》###

以上是vuejs slot 怎麼用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

深入探討vite是怎麼解析.env檔的 深入探討vite是怎麼解析.env檔的 Jan 24, 2023 am 05:30 AM

使用vue框架開發前端專案時,我們部署的時候都會部署多套環境,往往開發、測試以及線上環境呼叫的介面網域都是不一樣的。如何能做到區分呢?那就是使用環境變數和模式。

vue中組件化和模組化有什麼區別 vue中組件化和模組化有什麼區別 Dec 15, 2022 pm 12:54 PM

組件化和模組化的區別:模組化是從程式碼邏輯的角度進行劃分的;方便程式碼分層開發,確保每個每個功能模組的職能一致。元件化是從UI介面的角度進行規劃;前端的元件化,方便UI元件的重複使用。

圖文詳解如何在Vue專案中整合Ace程式碼編輯器 圖文詳解如何在Vue專案中整合Ace程式碼編輯器 Apr 24, 2023 am 10:52 AM

Ace 是一個用 JavaScript 寫的可嵌入程式碼編輯器。它與 Sublime、Vim 和 TextMate 等原生編輯器的功能和效能相符。它可以很容易地嵌入到任何網頁和 JavaScript 應用程式中。 Ace 被維護為Cloud9 IDE的主要編輯器 ,並且是 Mozilla Skywriter (Bespin) 專案的繼承者。

實戰:vscode中開發一個支援vue檔案跳到定義的插件 實戰:vscode中開發一個支援vue檔案跳到定義的插件 Nov 16, 2022 pm 08:43 PM

vscode本身是支援vue檔案元件跳到定義的,但是支援的力道是非常弱的。我們在vue-cli的配置的下,可以寫出很多彈性的用法,這樣可以提升我們的生產效率。但是正是這些靈活的寫法,導致了vscode本身提供的功能無法支援跳到檔案定義。為了相容於這些靈活的寫法,提高工作效率,所以寫了一個vscode支援vue檔案跳到定義的插件。

深入聊聊vue3中的reactive() 深入聊聊vue3中的reactive() Jan 06, 2023 pm 09:21 PM

前言:在vue3的開發中,reactive是提供實現響應式資料的方法。日常開發這個是使用頻率很高的api。這篇文章筆者就來探索其內部運作機制。

探討如何在Vue3中撰寫單元測試 探討如何在Vue3中撰寫單元測試 Apr 25, 2023 pm 07:41 PM

在當今前端開發中,Vue.js 已經成為了一個非常流行的框架。隨著 Vue.js 的不斷發展,單元測試變得越來越重要。今天,我們將探討如何在 Vue.js 3 中編寫單元測試,並提供一些最佳實踐和常見的問題及解決方案。

Vue中JSX語法和模板語法的簡單比較(優劣勢分析) Vue中JSX語法和模板語法的簡單比較(優劣勢分析) Mar 23, 2023 pm 07:53 PM

在Vue.js中,開發人員可以使用兩種不同的語法來建立使用者介面:JSX語法和範本語法。這兩種文法各有優劣,以下就來探討它們的差異和優劣勢。

淺析vue怎麼實現檔案切片上傳 淺析vue怎麼實現檔案切片上傳 Mar 24, 2023 pm 07:40 PM

在實際開發專案過程中有時候需要上傳比較大的文件,然後呢,上傳的時候相對來說就會慢一些,so,後台可能會要求前端進行文件切片上傳,很簡單哈,就是把比如說1個G的檔案流切割成若干個小的檔案流,然後分別請求介面傳遞這個小的檔案流。

See all articles