91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

slot-scope怎么在Vue中使用

發布時間:2021-04-17 15:33:02 來源:億速云 閱讀:294 作者:Leah 欄目:開發技術

slot-scope怎么在Vue中使用?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>組件之通過插槽(slot)分發內容</title>
    <script src="你的vue地址,請下載最新版的"></script>
    <script>
        Vue.component("test-slot",{
           // 插槽允許有默認內容
           template:
               `<div>
                    <strong>Error!</strong>
                    <slot></slot>
                </div>
               `,
            data:function () {
                return {
                    name:"perry"
                }
            }
        });
    //    具名插槽
        Vue.component("slot-name",{
           template:
               `<div>
                      <header>
                            <slot name="header"></slot>
                      </header>
                     <main>
                        <slot ></slot>
                     </main>
                     <footer>
                        <slot name="footer"></slot>
                     </footer>
 
                </div>
               `
        });
        
    //    作用域插槽
        Vue.component("todo-list",{
            inheritAttrs:false,
            props:{
                todos:[Array,Object]
            },
            template:
            `<ul>
                <li v-for="todo in todos" :key="todo.id"  >
                    <slot :data="todo">{{todo.text}}</slot>
                </li>
             </ul>
            `
        });
                
    </script>
    
    <style>
        li{
            list-style: none;
            display: inline-block;
            font-size: 25px;
        }
    </style>
</head>
<body>
    <div id="app">
        <!--1、插槽內容  slot可以接收任何內容、代碼,包括組件-->
        <test-slot>Something bad happened.你是誰啊,我認識你嗎</test-slot>
        <test-slot>
            Something bad happened.
            <!--允許使用變量,但該變量必須是本作用域的才會生效,這里name的值將會是"岔道口"-->
            <h4>標題{{name}}</h4>
            <img src="img/flower.jfif" alt="圖片無法顯示">
        
        </test-slot>
        <!--2、具名插槽 slo有一個特殊的屬性name,可以使插槽具名-->
        <slot-name>
            <h4>勸學</h4>
            <p>少壯不努力,老大徒傷悲</p>
            <p>光陰似箭,日月如梭</p>
            <template slot="header">
                <ul >
                    <li>主頁</li>
                    <li>關于時間</li>
                    <li>關于人生</li>
                    <li>關于未來</li>
                </ul>
            </template>
            <p>你好啊</p>
            <p slot="footer">
                <p>結尾</p>
                <p>粵ICP備6545646456415</p>
            </p>
        </slot-name>
        
        <!--使用作用域插槽,通過slot-scope實現-->
        <todo-list :todos="todos">
            <template slot-scope="slotProps">
                <span v-if="slotProps.data.isTrue">√</span>
                {{slotProps.data.text}}
            </template>
        </todo-list>
        
        <!--使用ES2015結構語法-->
        <todo-list :todos="todos">
            <template slot-scope="{data}">
                <span v-if="data.isTrue">√</span>
                {{data.text}}
            </template>
        </todo-list>        
    </div>
        
    <script>
        new Vue({
            el:"#app",
            data:{
                name:"岔道口",
                todos:[
                    {text:"A",id:1,isTrue:true},
                    {text:"B",id:2,isTrue:true},
                    {text:"C",id:3,isTrue:false},
                    {text:"D",id:4,isTrue:true},
                ],
                // slotProps:""
            }
        })
        
    </script>
</body>
</html>

例程中也寫了普通插槽和具名插槽,這個我就不說,我就說一下作用域插槽。首先從“作用域插槽“”這個名字說起,本來你父組件的模板是無法使用到子組件模板中的數據,官網中有一句特別強調的話:父組件模板的所有東西都會在父級作用域內編譯;子組件模板的所有東西都會在子級作用域內編譯。這句話其實挺難理解,舉個例子就知道了,

<test-slot>

          Something bad happened.

         <!--允許使用變量,但該變量必須是本作用域的才會生效,這里name的值將會是"岔道口"-->

           <h4>標題{{name}}</h4>

           <img src="img/flower.jfif" alt="圖片無法顯示">

</test-slot>

這是我上面的例子,也就是說這里name必須是當前組件里的,不能是test-slot這個組件內部的數據,這是它作用域限制,name這個數據屬于父組件的作用域,所以只能是父組件的數據。但是slot-scope的出現卻實現了父組件調用子組件內部的數據,子組件的數據通過slot-scope屬性傳遞到了父組件

//    作用域插槽
    Vue.component("todo-list",{
        inheritAttrs:false,
        props:{
            todos:[Array,Object]
        },
        template:
        `<ul>
            <li v-for="todo in todos" :key="todo.id"  >
                  //這里的:data=“todo”就是講子組件todo這個數據傳給了父組件
                <slot :data="todo">{{todo.text}}</slot>//todo.text是默認值,父組件會把它覆蓋掉
            </li>
         </ul>
        `
    });
<!--使用作用域插槽,通過slot-scope實現-->
<todo-list :todos="todos">
    <template slot-scope="slotProps">
        <span v-if="slotProps.data.isTrue">√</span>
        {{slotProps.data.text}}
    </template>
</todo-list>

使用的時候就是這樣,從子組件傳過來的名為data值為todo的數據將會被slot-scope接收,需要注意的是,slot-scope接收的是一個對象,這里命名為slotProps,也就是說你傳過來的data將會作為slotProps的一個屬性,所以需要slotProps.data才能調用到data。前面說了,data的值為todo,todo是什么呢?todo是todos遍歷出來的,所以是一個對象。

new Vue({
    el:"#app",
    data:{
        name:"岔道口",
        todos:[
            {text:"A",id:1,isTrue:true},
            {text:"B",id:2,isTrue:true},
            {text:"C",id:3,isTrue:false},
            {text:"D",id:4,isTrue:true},
        ],
        // slotProps:""
    }
});

看完上述內容,你們掌握slot-scope怎么在Vue中使用的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

同仁县| 中方县| 远安县| 建水县| 哈密市| 昌平区| 峨眉山市| 汶川县| 洛阳市| 乌兰察布市| 徐水县| 阿瓦提县| 仁寿县| 逊克县| 汕头市| 石林| 铜山县| 永福县| 陵水| 哈尔滨市| 周宁县| 九江县| 灌南县| 合肥市| 永新县| 渑池县| 横峰县| 福州市| 达拉特旗| 邹平县| 襄垣县| 左权县| 大理市| 苍溪县| 鄂尔多斯市| 霞浦县| 阳曲县| 新兴县| 灵石县| 新建县| 拉孜县|