vue-render函数和插槽
Vue render函数,官方文档定义绝大部分时候我们使用template 来创建html 模板,但是纯html 和css都基本上都不具有编程能力,而当我们想使用
javascript的编程能力时,我们可以用render 函数来创建html 模板
1.使用简单的tamplate 去创建html 模板
// 使用简单的template 去创建html 模板
new Vue({
el:'#test',
data:{
msg:'czczczcz'
},
template: '<h1> {{this.msg}} </h1>' // 我们使用template 去创建html 模板
})
2.当我们现在需求比较复杂,根据传入的一组标签组去创建模板,让我们先看看使用tamplate的方法
<div id="test">
<div v-html="jstem()">
</div>
</div>
<script type="text/javascript">
new Vue({
el:'#test',
data:{
msg:['h1','h3','span','ul'] //简单的一组标签组
},
// 如果是直接使用标签我实在没想到办法 。我能想到的只能是
methods: {
jstem () {
let html = '';
if(this.msg) {
this.msg.forEach(item => {
html += `<${item}>${item}</${item}>`
})
}
return html
}
}
})
</script>
上面的话还是使用javascript的编程你能力,我总结的是,就是当组件的html 模板都不固定,可能都需要一定的业务逻辑才能确定时,我们就可以考虑去使用render 函数,创建html模板,官方文档还讲明,template 最终还是要通过模板解析的,一系列底层操作后生成虚拟dom,而rander函数比tamplate更接近编辑器,也就是更容易转话成虚拟dom。
render 函数
render 函数传入一个createElement 方法,而这个方法,我们一般简写为h ,可以参阅vue-cli main.js 的 render: h => h(App)
<div id="test"> </div>
<script type="text/javascript">
new Vue({
el:'#test',
data:{
msg:['h1','h3','span','ul'] //简单的一组标签组
},
render: function(h) {
return h(
'div', //传入的为一个节点的名称
{},
this.msg.map(function(item){ //第二个传入的为节点的值,值可以时一组元素节点
return h(item,item)
})
)
}
})
render 函数内传入的第二个参数 data ,一系列属性,包括 class,style,arrts,props,domprops,on,nativeOn,directives,scopedSlots,slot,key,ref,refInfor
具体的用法请详见官方文档
vue 插槽,主要是用于组件标签内信息,在组件内部展示,最新的slot 和slot-scope已经被官方放弃,且不会出现Vue3中,vue 新引入了v-slot 指令
官方文档上的列子
//定义一个baseLayout 组件
<div class="container">
<header>
<slot name="header"></slot>
</header>
<main>
<slot></slot>
</main>
<footer>
<slot name="footer"></slot>
</footer>
</div>
// 上面定义了一个子组件, 子组件有三个插槽,header,footer,还有一个匿名插槽,其实是default // 父组件内容 使用了v-slot
<base-layout>
<template v-slot:header>
<h1>Here might be a page title</h1>
</template> <p>A paragraph for the main content.</p>
<p>And another one.</p> <template v-slot:footer>
<p>Here's some contact info</p>
</template>
</base-layout> // 如果不使用v-slot 旧特性,定义具名
<base-layout>
<h1 slot='header'>Here might be a page title</h1> <p>A paragraph for the main content.</p>
<p>And another one.</p>
<p slot='footer'>Here's some contact info</p>
</slot > 最终会渲染出
<div class="container">
<header>
<h1>Here might be a page title</h1>
</header>
<main>
<p>A paragraph for the main content.</p>
<p>And another one.</p>
</main>
<footer>
<p>Here's some contact info</p>
</footer>
</div>
具名插槽v-slot 的缩写为#
v-slot='header' 可以写成 #header
vue-render函数和插槽的更多相关文章
- vue render函数
基础 vue推荐在绝大多数情况下使用template来创建你的html.然而在一些场景中,你真的需要javascript的完全编程能力.这就是render函数.它比template更接近编译器 < ...
- [转]iview render函数常用总结(vue render函数)
原文地址:https://blog.csdn.net/weixin_43206949/article/details/89385550 iview 的render函数就是vue的render函数ivi ...
- vue render函数 函数组件化
之前创建的锚点标题组件是比较简单,没有管理或者监听任何传递给他的状态,也没有生命周期方法,它只是一个接受参数的函数 在这个例子中,我们标记组件为functional,这意味它是无状态(没有data), ...
- vue render函数解析
一.render 函数的作用: 写一些vue.js的template太繁琐,利用render,可以使用js来生成模板,更加灵活和简便. 二.使用render前提: 官网也说了.在深入渲染函数之前推荐阅 ...
- vue render函数使用jsx语法 可以使用v-model语法 vuex实现数据持久化
render函数使用jsx语法: 安装插件 transform-vue-jsx 可以使用v-model语法安装插件 jsx-v-model .babelrc文件配置: vuex实现数据持久化 安装插 ...
- Vue render函数 函数时组件 jsx
常规组件使用 定义组件 components/list/list.vue <template> <ul> <li v-for="(item, index) in ...
- 会使用基本的Render函数后,就会想,这怎么用 v-for/v-if/v-model;我写个vue Render函数进阶
https://blog.csdn.net/wngzhem/article/details/54291024
- 何时/如何使用 Vue3 render 函数
什么是 DOM? 如果我们把这个 HTML 加载到浏览器中,浏览器创建这些节点,用来显示网页.所以这个HTML映射到一系列DOM节点,然后我们可以使用JavaScript进行操作.例如: let it ...
- iview中table的render()函数
Vue 推荐在绝大多数情况下使用 template 来创建你的 HTML.然而在一些场景中,你真的需要 JavaScript 的完全编程的能力,这就是 render 函数,它比 template 更接 ...
随机推荐
- 描述性统计指标 - 众数 Mode
定义- 数值型数据 - 出现频数最多的变量值- 品质型数据.单项式分组数据 - 频数最多的组为众数组,该组的变量值(类型)就是众数- 组距式分组数据 - 频数最多的组为众数组,通过公式求得众数 - 公 ...
- 初探奥尔良(Orleans)
由于工作上关系目前经常被各种并发数据问题搞得焦头烂额,要么要性能舍弃数据上得一致性,要么要一致性但是却得到了特别糟糕的响应.难道鱼和熊掌真的无法兼得吗? 然后找到了类似奥尔良这种基于Actor模型的k ...
- C#字符串的一些常用方法
字符串常用方法 string str =""; string[] strArray = str.Split('截取字符'); //按字符将字符串拆分为数组 str = str.Re ...
- .net mvc前台如何接收和解析后台的字典类型的数据
很久没有写博客了,最近做了一个公司门户网站的小项目,其中接触到了一些我不会的知识点,今日事情少,便记录一下,当时想在网上搜索相关的内容,但是没有找到. 今天想记录一下这样一个小的需求的做法.先说一下我 ...
- idea配置tomcat运行按钮置灰,下拉没有自定义的tomcat选项
一.问题 下拉没有自定义tomcat的选项 run按钮置灰,点不了 二.解决 添加自己的tomcat时,一定要点加号,不要用那个默认的.
- 在线修改redo日志大小
注意点:1.redo要是能sesize的话就完美了2.drop时候如果active就得checkpoint才能drop3.物理删除旧redo文件redo大小影响切换,进而影响性能,至于什么样的业务设置 ...
- SQL Server使用sp_spaceused查看表记录存在不准确的情况
在之前写过一篇博客"关系数据库如何快速查询表的记录数",里面介绍了使用sp_spaceused查看表的记录数是否正确的问题,具体如下: 关于问题3:有多个索引的表,是否记录数会 ...
- mysql7笔记----遍历节点所有子节点
mysql遍历节点的所有子节点 DELIMITER // CREATE FUNCTION `getChildrenList`(rootId INT) ) BEGIN ); ); SET sTemp = ...
- LDAP客户端在Windows环境的部署及配置
ldap客户端配置安装目录的子目录C:\OpenLDAP\etc\openldap,编辑slapd.conf,修改密码,保存并关闭文件.rootdn "cn=Manage ...
- NumPy的基本用法
NumPy简介:NumPy是高性能科学计算和数据分析的基础包.是pandas等其他各种工具的基础NumPy主要功能:ndarray,一个多维数组结构,高效且节省空间无需循环对数组数据进行快速运算的数学 ...