Vue组件化开发(三)——slot插槽的使用
相信有过项目开发经验的小伙伴一定知道,在项目中往往会有多个地方需要用到样式相似,细节略有差异的组件,比如说导航栏和搜索栏,这些组件出现频率比较高,但是在不同的场景下我们对于导航栏的内容有着不同的需要。而如果为了这点细微的区别再专门写一个组件会十分麻烦,而且复用性也很低。
可能有些读者会觉得,这不难解决,对于子组件中不确定的地方我们可以交由父组件的props传值来进行解决,比如导航栏中的标题,我们可以都交由父组件传值来实现。(比如下面的导航栏1和导航栏2)
不错,当组件的变化程度不大时,这确实可以十分方便地解决组件复用的问题。但如果说我想要实现根据不同的场景,导航栏中部的位置可能是标题,也有可能是下拉框,是搜索框或者是其他自定义的组件呢?此时我们就很难单纯通过 props 来拓展我们的组件灵活性了。(比如下面的导航栏1和导航栏3)
在子组件中,使用特殊的元素<slot>就可以为子组件开启一个插槽。该插槽插入什么内容取决于父组件如何使用。我们可以看一下下面这个案例:
我们一共在Vue实例中使用了2次子组件,第一次父组件没有往子组件中传递元素,第二次父组件有往子组件传递元素。
从结果上看,当父组件没有往子组件插槽中添加元素时,则会展示插槽中默认的内容,而如果父组件有传递插槽内容,则会覆盖插槽的默认内容,而后进行显示。
在第二小节中,我们已经知道了插槽的基本使用,但是当子组件的功能比较复杂时,我们可能就要在组件中定义多个插槽,来满足更加灵活的业务需要。比如上面举例的京东导航栏,这个组件内部可以拆分为三个插槽,分别对应 左 、 右 、 中 三个位置的内容。
但想要在组件内预留多个插槽有个前提条件,就是我们必须要让每个插槽都有其对应的唯一标识,这样父组件传递内容的时候,才能识别出来哪些内容对应哪个插槽。
我们可以看一下下面这个案例:
子组件内定义了三个具名插槽,我们在父组件中进行子组件的调用,需要注意的是我们并没有完全按照顺序去传递对应插槽的内容。但实际上从演示结果中我们可以发现, 无论父组件传递的插槽内容顺序如何,最终解析的时候都会将传入的插槽内容根据 slot name 进行正确的渲染的 。
在讲解作用域插槽之前,我们需要先对 编译作用域 进行理解。具体表现在 父组件模板的所有东西都会在父级作用域内编译;子组件模板的所有东西都会在子级作用域内编译。
我们可以通过下面这个案例来理解这个规则:
父组件和子组件都使用了 isShow 来控制组件的显示,同时在父子组件的data中,又都有同名的变量 isShow 。我们从结果中可以看到,定义在在父组件中子组件,其组件是否可见取决于父组件data中的变量值。而在子组件template中定义的 isShow 标识,则受子组件自身data变量的约束,也就是说此处子组件模板的变量取的是子级作用域中的变量值。
在上一小节的演示中,我们已经可以了解到编译作用域的概念,也知道了父组件无法直接使用子组件内部的数据(因为子组件模板内部的数据是在子组件的作用域中的)。但 有些场景下,我们又会需要父组件可以替换插槽的标签,但是内容由子组件来提供。 那么,此时我们就可以使用作用域插槽来解决这个问题。
我们可以来看一下下面这个案例:子组件中存在一个数组,现在我们想要通过插槽的方式,来根据不同的需要实现数组的展示方式:
在父组件中,我们定义了2种展示数据的方式,一种为展示为列表形式,还有一种是每种语言以 -- 进行分割。在使用上,子组件需要在插槽处通过 :data 的方式提供对外暴露的数据,父组件在使用的时候,则是先在子组件内部定义 <template> 标签,从 slot-scope 属性中取出slotProps参数(其实slotProps就是一个对象,里面封装着所有子组件插槽对外暴露的数据)。
我们通过 slotProps.data 就可以获取到我们在子组件插槽中封装的data数据啦
至此,有关插槽的内容就到此结束啦,作用域插槽多见于常见的组件库中(比较多是在table组件中出现),所以最好要熟悉插槽的原理和使用,这样可以更好地简化我们的开发工作
UI设计有哪些课程内容?
3熟悉插画在互联网设计中的使用场景 4掌握配色与构图技巧 阶段课程特点 案例全部使用数位板结合软件进行绘制,提高作品质量,授课思路与方法完全适用于互联网设计特点,摒弃传统美术艺术思维,利用插画组件化概念进行作品创作,顺应岗位需求,提高工作效率。第三阶段:互联网运营设计课 运营基础篇 banner设计 字...
web前端自学要多久?
您有意向学习前端的话,千锋教育是一个不错的选择。千锋的教育培训业务致力于培养高质量数字化技术技能人才,主要提供大学生技能培训、职后技能培训等,课程涵盖前端、Java、Python、大数据、软件测试、物联网、云计算、网络安全、Unity、区块链、UI\/UE设计、影视剪辑包装、商业插画、游戏原画、全媒体运营、...
UI培训主要是学习哪些内容
三、互联网运营设计 1、运营基础篇,包含:banner设计,字体设计,裂变海报设计,运营长图排版;2、运营提升篇,包含:运营设计思维,活动主KV设计,运营设计延展规范,活动专题页设计,公司设计中台系统与组件化概念。四、C4D三维制作 1、C4D建模篇,包含:C4D常用工具介绍,多边形建模,曲线建模,角色建模...
ui设计有哪些课程?
商业UI设计全链式设计方法与流程 高高手课程|第03章·量化设计产出效果|第02章·提高设计稿的商业性|第01章·打破传统设计流程|第一节:设计瓶颈及传统设计流程.flv|第二节:全链式设计流程.flv|第5节 - 验证设计方案:界面浏览测试.flv|第4节 - 界面排版依据:十字交叉分析法.flv|第3节 - 初识...
企业软件开发中低保真原型和UI设计规格有什么不同
软件积累很深的企业还可以通过高保真原型和组件化降低产品UI设计规格的复杂度,因为直接将高保真原型和组件列在文档的相应说明中,开发人员会直接下载或拷贝相关代码,这样编程中很多需要组件内部实现的交互就不用重新编程了,开发人员也可以通过继承样例代码快速实现高质量的界面交互。不过,这个需要产品或企业先做好平台积累或...
ui都学什么知识?
那除了这些的话还有就是一些辅助性的软件跟插件,比如cutterman切图插件,像素大厨跟markman标注软件。移动设备端UI设计、UE交互设计 1. 手机主题、界面与图标设计;2. 拟物化与扁平化设计;3. 系统性学习苹果IOS设计规范;4. 系统性学习Android设计规范。以上的回答希望对你有所帮助 ...
国内有哪些比较好的unity论坛
社区是否活跃?4. 目前发展态势怎么样?(开源项目别今后没人管,商业产品公司不能倒闭了)5. 扩展性如何?是否利于团队合作?(有的技术入门简单但拿来做大项目就是个灾难)在这几个方面,虽然技术层面unity和cocos2d是完全不同的东西,但是作为目前开发手游所采用最为普遍的两种技术方案,是具有可比性的...
小米有品电商平台设计部负责人李适:感动人心的设计
UE 和 UX 都是 User Experience (用户体验)的缩写,国内公司习惯把交互设计命名为 UE \/ UX ,但实际...提效的工具有很多,比如飞书、蓝湖、石墨文档、腾讯文档、 Sketch 的组件化管理等。作为团队管理者,要跟
西安UI设计培训学习内容大概有哪些?
通过各种不同风格GUI设计,掌握Photoshop、Illustrato、C4D、XMind、Axure、HBuilder、After Effects等相关软件操作与手绘UI设计,熟练使用软件,通过项目实训直接设计。二.LOGO标志设计:图形标志 (扁平化、立体、矢量)、字体标志(中英文)、VI组合方式、国内外最新标志流行趋势(点状、放射等)三.标准色:某一...
请教各位如何在香港跑马开户
用料 纯瘦猪肉(上脑那点,稍嫰的) 500g 盐 适量 胡椒粉 适量 花椒粉 适量 椒盐猪排的做法 把猪肉切成1cm厚的大片,用小锤把内劲斩断,这是厚肉片也变薄了变大了许多,依次这样把每一片都弄好。 均匀撒上盐用手拍打,正反面都这样做哦! 依次上面的手法...
朱怪十味: 其实vue的思想是组件式开发的思维方式,不要去想着修改dom,监听dom;而是换个角度,从监听数据的方式去间接性的达到监听dom的目的,组件的开发是数据驱动dom的,这是必须要理解到位的.还有带slot的组件,不应该再去干预slot里面的内容了;而是在关系到slot内容的父组件去设定指令.
新和县13468798333: 如何利用vue组件 动态生成router - link - ?
朱怪十味: 首先,Vue.component的第二个参数是一个配置对象,你这个写法连JS语法都不符合.其次,template配置应该是一个HTML代码的字符串,所以改成:Vue.component('sidebar', { template: ''Go to FooGo to Bar }); Update (参考资料:...
新和县13468798333: Vue如何获取自定义组件标签之间的值(innerHTML) - ?
朱怪十味: vue1.*版本中 在标签中加上el='dom',然后在代码中this.$els.dom这样就拿到了页面元素 vue2.*版本中 在标签上加上ref=dom',然后在代码中this.$refs.dom.$el这样就拿到了页面元素
新和县13468798333: vue组件化开发怎么引入外部js文件 - ?
朱怪十味: 这里的组件化开发是使用什么?? vue-loader么...如果是vue-loader可以通过 require来引入就可以 比如Js文件写到assets/js中 在main.js中可以 require('./src/assets/xxx.js') 如果只是单页面html,可以直接引入就行了<script src="xxxx.js">
新和县13468798333: vue中自定义指令是通过什么属性实现 - ?
朱怪十味: bind - 只调用一次,在指令第一次绑定到元素上时候调用 update - 在bind之后立即以初始值为参数第一次调用,之后绑定值变化的时候,参数为新值与旧值 unbind - 只调用一次,在指令从元素上解绑的时候调用
新和县13468798333: 在vue中实现orgchat 组织结构图 - ?
朱怪十味: 用Microsoft Office Visio这个软件吧,专门用来画各类图表的,里面有各种各样的模板.很方便.网上下载一个安装好就可以了.比你用Word或者PowerPoint强.
新和县13468798333: vuejs的组件化开发中,要怎么自定义class,覆盖原有的css样式 - ?
朱怪十味: <el-table-column>并不是一个dom节点,所以infotext这个类究竟用在哪,需要看下el-table-column这个组件的实现才知道.用了第三方组件的必然都会遇到你这样的问题,我说下我的解决方法,不一定是好的.一个vue文件可以写多个<style></...
新和县13468798333: vue.js中,在一个vue组件中,想通过点击按钮,才加载另外一个目标vue组件,要怎么实现? - ?
朱怪十味: <button @click='onclick'></button> <div> <mycomponent v-if='showcom'></mycomponent> </div> { data: { showcom: false } methods: { onclick: function () { this.showcom = true; } } }Vue.js(读音 /vjuː/, 类似于view)是一套构建用户界面的渐进式...
新和县13468798333: 怎样利用Vue动态生成form表单 - ?
朱怪十味: $formCreate 参数 rules 表单生成规则 [inputRule,selectRule,...] options 初始化配置参数 (详细见底部 createOptions)$formCreate.maker 组件规则生成器 除hidden外,其他配置方式全部相同.详细参考表单元素规则 props,event,slot传入参数为对...
新和县13468798333: 什么是组件化开发 - ?
朱怪十味: 组件化编程的关键目的是为了将程序模块化,使各个模块之间可以单独开发,单独测试.当然,随之而来的版本问题也必须要解决,防止出现不兼容的组件版本破坏程序的稳定性.