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)
})
)
}
})
  </script>
 

  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函数和插槽的更多相关文章

  1. vue render函数

    基础 vue推荐在绝大多数情况下使用template来创建你的html.然而在一些场景中,你真的需要javascript的完全编程能力.这就是render函数.它比template更接近编译器 < ...

  2. [转]iview render函数常用总结(vue render函数)

    原文地址:https://blog.csdn.net/weixin_43206949/article/details/89385550 iview 的render函数就是vue的render函数ivi ...

  3. vue render函数 函数组件化

    之前创建的锚点标题组件是比较简单,没有管理或者监听任何传递给他的状态,也没有生命周期方法,它只是一个接受参数的函数 在这个例子中,我们标记组件为functional,这意味它是无状态(没有data), ...

  4. vue render函数解析

    一.render 函数的作用: 写一些vue.js的template太繁琐,利用render,可以使用js来生成模板,更加灵活和简便. 二.使用render前提: 官网也说了.在深入渲染函数之前推荐阅 ...

  5. vue render函数使用jsx语法 可以使用v-model语法 vuex实现数据持久化

    render函数使用jsx语法: 安装插件  transform-vue-jsx 可以使用v-model语法安装插件 jsx-v-model .babelrc文件配置: vuex实现数据持久化 安装插 ...

  6. Vue render函数 函数时组件 jsx

    常规组件使用 定义组件 components/list/list.vue <template> <ul> <li v-for="(item, index) in ...

  7. 会使用基本的Render函数后,就会想,这怎么用 v-for/v-if/v-model;我写个vue Render函数进阶

    https://blog.csdn.net/wngzhem/article/details/54291024

  8. 何时/如何使用 Vue3 render 函数

    什么是 DOM? 如果我们把这个 HTML 加载到浏览器中,浏览器创建这些节点,用来显示网页.所以这个HTML映射到一系列DOM节点,然后我们可以使用JavaScript进行操作.例如: let it ...

  9. iview中table的render()函数

    Vue 推荐在绝大多数情况下使用 template 来创建你的 HTML.然而在一些场景中,你真的需要 JavaScript 的完全编程的能力,这就是 render 函数,它比 template 更接 ...

随机推荐

  1. r.js合并实践 --项目中用到require.js做生产时模块开发 r.js build.js配置详解

    本文所用源代码已上传,需要的朋友自行下载:点我下载 第一步: 全局安装  npm install -g requirejs 第二步: 1.以下例子主要实现功能, 1)引用jq库获取dom中元素文本, ...

  2. 一名合格的Web安全工程师之成长路径

    最近经常听到公司的招聘专员反馈应聘者简历“水分”太大,尤其是技术岗位,例如Web安全工程师,明明是初级阶段的菜鸟,就敢写资深Web安全工程师:在几个项目做一些基础打杂的工作,就敢写带过团队,项目经验丰 ...

  3. 从零单排学Redis【白银】

    前言 只有光头才能变强 今天继续来学习Redis,上一篇从零单排学Redis[青铜]已经将Redis常用的数据结构过了一遍了.如果还没看的同学可以先去看一遍再回来~ 这篇主要讲的内容有: Redis服 ...

  4. 设计模式之责任链模式——Java语言描述

    责任链模式为请求创建了一个接受者对象的链.这种模式给予请求的类型,对请求的发送者和接受者进行解耦.这种类型的设计模式属于行为模式.在这种模式下,通常每个接收者都包含对另一个接收者的引用.如果一个对象不 ...

  5. ArcGIS API for JavaScript 4.x 本地部署之IIS法

    [导读] 关于如何在默认网站(Default Web Site,物理地址C:\inetpub\wwwroot\)启动,已有很多博客详尽地写好了. 本篇在自建网站(本机)中配置http而非https的j ...

  6. ArcMap插件开发初识:Add In

    之前一直在做ArcEngine的相关开发,做的winform相关,新换了工作,又开始新的学习旅程! Add In 这个东西很早就知道有,但是一直没有用过,因为之前的公司有自己框架,接口,虽然我也是做插 ...

  7. Android中对已安装应用的管理实现

    获取.管理手机中已安装的所有应用信息 1.创建应用的实体类AppInfo,属性有应用的名称.包名.图标.第一次安装时间和版本名称 public class AppInfo { private Stri ...

  8. Flutter 即学即用系列博客——07 RenderFlex overflowed 引发的思考

    背景 在进行 Flutter UI 开发的时候,控制台报出了下面错误: flutter: ══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY >╞════════ ...

  9. AI应用开发实战 - 手写算式计算器

    扩展手写数字识别应用 识别并计算简单手写数学表达式 主要知识点 了解MNIST数据集 了解如何扩展数据集 实现手写算式计算器 简介 本文将介绍一例支持识别手写数学表达式并对其进行计算的人工智能应用的开 ...

  10. ansible基础-task控制

    1. 前言 很多情况下,一个play是否执行会依赖于某个(些)变量的值,这个变量可以来自自定义变量.facts,甚至是另一个task的执行结果. ansible通过变量判定task是否执行,我们称之为 ...