Vue学习笔记 —— 插槽

    科技2022-07-14  119

    什么是插槽?

    插槽就是子组件提供给父组件使用的一个占位符,用 表示,父组件可以在这个占位符中填充任何模板代码,如 HTML、组件等,填充的内容会替换子组件的标签。

    如下代码:

    //子组件 <template> <div> <p>什么是插槽?</p> <slot></slot> </div> </template> <script> export default{ name: 'child' } </script> //父组件 <template> <div> <div>使用插槽</div> <div style="margin: 30px"> <child> <div>插槽内容</div> </child> </div> </div> </template>

    效果如下:

    补充:如果不使用插槽,直接在父组件中在子组件中填充内容:

    如下代码:

    //子组件 <template> <div> <p>什么是插槽?</p> </div> </template> <script> export default{ name: 'child' } </script> //父组件 <template> <div> <div>使用插槽</div> <div style="margin: 30px"> <child> <div>插槽内容</div> </child> </div> </div> </template>

    效果如下: 总结:如果子组件没有使用插槽,父组件如果需要往子组件中填充模板或者html, 是没法做到的

    插槽的使用

    描述:具名插槽就是给插槽娶个名字。一个子组件可以放多个插槽,而且可以放在不同的地方,而父组件填充内容时,可以根据这个名字把内容填充到对应插槽中。

    如下代码:

    //子组件 <template> <div> <p>Header</p> <slot name="header"></slot> </div> <div> <p>Footer</p> <slot name="footer"></slot> </div> </template> <script> export default{ name: 'child' } </script> //父组件 <template> <div> <div>使用具名插槽</div> <div style="margin: 30px"> <child> <template v-slot:header> <h1>Header</h1> </template> <template v-slot:footer> <h1>footer</h1> </template> </child> </div> </div> </template>

    效果如下: 总结:父组件填充内容时,是可以根据插槽名字把内容填充到对应插槽中,即使父组件对插槽的填充的顺序打乱也不会有影响。

    插槽的使用 - 默认插槽

    描述: 默认插槽就是指没有名字的插槽,子组件未定义的名字的插槽,父级将会把 未指定插槽的填充的内容填充到默认插槽中。

    如下代码:

    //子组件 <template> <div> <p>Header</p> <slot name="header"></slot> </div> //默认插槽 <div> <p>Default</p> <slot></slot> </div> <div> <p>Footer</p> <slot name="footer"></slot> </div> </template> <script> export default{ name: 'child' } </script> //父组件 <template> <div> <div>使用具名插槽</div> <div style="margin: 30px"> <child> <template v-slot:header> <h1>Header</h1> </template> <template v-slot:footer> <h1>footer</h1> </template> <template> <h1>默认插槽</h1> </template> </child> </div> </div> </template>

    效果如下:

    总结:

    父级的填充内容如果指定到子组件的没有对应名字插槽,那么该内容不会被填充到默认插槽中如果子组件没有默认插槽,而父级的填充内容指定到默认插槽中,那么该内容就“不会”填充到子组件的任何一个插槽中。如果子组件有多个默认插槽,而父组件所有指定到默认插槽的填充内容,将“会” “全都”填充到子组件的每个默认插槽中。

    插槽的使用 - 作用域插槽

    描述:作用域插槽其实就是带数据的插槽,即带参数的插槽。

    简单的来说就是子组件提供给父组件的参数,该参数仅限于插槽中使用,父组件可根据子组件传过来的插槽数据来进行不同的方式展现和填充插槽内容。

    使用方法:

    子组件存放一个带数据的插槽: mylist和title是子组件传给父组件的参数

    父组件通过 “slot-scope” 来接收子组件传过来的插槽数据,再根据插槽数据来填充插槽的内容

    常用场景(以下为常用的情况之一) 如果子组件中的某一部分的数据,每个父组件都会有自己的一套对该数据的不同的呈现方式,这时就需要用到作用域插槽。

    参考博客:vue_插槽的理解和使用

    Processed: 0.014, SQL: 8