组件化高级

插槽slot

  • 在原来的功能上具有扩展性

  • 组件的插槽:

    • 组件的插槽为了让我们封装的组件更加的具有扩展性

    • 让使用者可以决定组建内部的一些内容到底展示什么

  • 如何去封装这些组件?抽取共性,保留不同

    • 最好的封装方式就是将共性抽取到组件中,将不同暴露为插槽

    • 一旦我们预留了插槽,就可以让使用者根据自己的需求,决定插槽中插入什么内容

    • 是搜索框,还是文字,还是菜单,都由调用者自己来决定

插槽的基本使用

  1. 插槽的基本使用:
  2. 插槽的默认值:< button>按钮
  3. 如果有多个值,同时放入到组件进行替换,一起作为替换元素

具名插槽的使用

指定slot的name,并在引用组件的时候给定是哪一个插槽

<div id="app">
<cpn>
<button slot="left"><</button>
<span slot="center">标题</span>
<button slot="right">···</button>
</cpn>
</div>
<template id="cpn">
<div>
<slot name="left"><span>左边</span></slot>
<slot name="center"><span>中间</span></slot>
<slot name="right"><span>右边</span></slot>
</div>
</template>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
message: '你好啊'
},
components: {
cpn: {
template: `#cpn`
}
}
})
</script>

编译作用域

  • 官方给出了一条准则:父组件模板的所有东西都会在父级作用域内编译;子组件模板的所有东西都会在子级作用域内作用域内编译
<div id="app">
<!-- 这里是可以显示的,因为这个cpn属于app在Vue实例中 -->
<cpn v-show="isShow"></cpn>
</div>
<template id="cpn">
<div>
<h2>我是子组件</h2>
<p>我是内容,哈哈哈</p>
<!-- 这里不能显示,因为这个isShow属于组件,在作用域里查找isShow为false -->
<button v-show="isShow">按钮</button>
</div>
</template>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
message: '你好啊',
isShow: true
},
components: {
cpn: {
template: `#cpn`,
data() {
return {
isShow: false
}
}
}
}
})
</script>

作用域插槽:准备

  • 用一句话做一个总结,然后在后续的案例中体会:
    • 父组件替换插槽的标签,但是内容由子组件来提供

例:想让父组件换一种格式输出,但是拿不到子组件中的值

<div id="app">
<cpn></cpn>
<cpn>
<!--目的是获取子组件中的pLanguages-->
<spn v-for="item in pLanguages">
{{item}} -
</spn>
</cpn>
</div>
<template id="cpn">
<div>
<slot>
<ul>
<li v-for="item in pLanguages">
{{item}}
</li>
</ul>
</slot>
</div>
</template>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
message: '你好啊'
},
components: {
cpn: {
template: `#cpn`,
data() {
return {
pLanguages: ['JavaScript', 'C++', 'Java', 'C#', 'Python', 'Go', 'Swift']
}
}
}
}
})
</script>

效果:

正确:

posted @ 2021-08-11 01:44  coderElian  阅读(37)  评论(0)    收藏  举报
编辑推荐:
· 从“看懂世界”到“改造世界”:AI发展的四个阶段你了解了吗?
· 协程本质是函数加状态机——零基础深入浅出 C++20 协程
· 编码之道,道心破碎。
· 记一次 .NET 某发证机系统 崩溃分析
· 微服务架构学习与思考:SOA架构与微服务架构对比分析
阅读排行:
· 从“看懂世界”到“改造世界”:AI发展的四个阶段你了解了吗?
· dotnetty 新的篇章- 开源
· 设计模式:简单工厂、工厂方法与抽象工厂
· 用好 JUnit 5 的高级特性:提升单测效率和质量
· Java线程池详解:高效并发编程的核心利器
点击右上角即可分享
微信分享提示