vue获取模板内容的方式

目录

  • outerHTML获取内容
  • template属性获取内容
    • ES6的字符串模板
    • <template>标签
    • <srcipt type="text/x-template></script>
  • render()函数
    • render(createElement => createdElement(标签名称,数据对象,子节点列表))
    • JSX语法:render(() => {return (JSX)})

vue遵循数据驱动的理念,在视图层通过模板处理数据在页面的显示。所以vue至少要获取到数据和模板内容。数据在VUE实例化时通过配置项的options对象的data属性传入,即options.data,那模板内容即页面HTML内容如何获取到呢?

我们先看下官方文档中,VUE的生命周期图解:

在vue实例化过程中,会先判断配置对象options是否有提供template属性值,如果没有就使用原生DOM方法el.outerHTML()获取挂载元素中的DOM内容作为模板内容,如果有提供template属性值,就直接使用其值,并覆盖el元素中的内容。

另外,vue所获取到的template内容最终都需要传入render()渲染,所以vue 2.0之后,也直接将render方法暴露出来,可以直接使用。

所以,最终vue获取HTML内容有三种方式:outerHTML() / template / render(),其中每种方法又有一些各自的写法。

html写法

<div id="example_outerHTML">
<div>{{ msg }}</div>
</div> <script>
new Vue({
el: "#example_outerHTML",
data: {
msg: "HELLO VUE by outerHTML"
}
})
</script>

template 属性写法

<div id="example_template_string"></div>

<script>
new Vue({
el: "#example_template_string",
data: {
msg: "HELLO VUE by template string"
},
// 简单HTML直接使用字符串拼接,也可以使用ES6模板字符串换行书写,更直观
// template: "<div>{{ msg }}</div>",
template: `<div>
<span>{{ msg }}</span>
</div>`,
})
<script>

template 标签写法

<div id="example_template_tag"></div>
<template id="temp_tag">
<div>{{ msg }}</div>
</template> <script>
new Vue({
el: "#example_template_tag",
data: {
msg: "HELLO VUE by template tag"
},
// 使用<template>标签写法
template: "#temp_tag", })
</script>

script x-template类型

<div id="example_script"></div>
<script id="temp_script" type="text/x-template">
<div>{{ msg }}</div>
</script> <script>
new Vue({
el: "#example_script",
data: {
msg: "HELLO VUE by template script"
},
template: "#temp_script"
})
</script>

render(createElement)

<div id="example_render_createElement"></div>

<script>
new Vue({
el: "#example_render_createElement",
data: {
msg: "HELLO VUE by render createElement"
},
// 写法一:
// render: function (createElement) {
// return createElement("div", this.msg)
// }, // 写法二: 约定 const h = this.$createElement,所以简写
render: function (h) {
return h("div", this.msg)
}, // 写法三:使用ES6语法,同名对象的简写
// render: h => h("div", this.msg)
})
</script>

JSX

<div id="example_render_JSX"></div>

<script>
// JSX语法需要安装插件
// npm install @vue/babel-preset-jsx @vue/babel-helper-vue-jsx-merge-props
new Vue({
el: "#example_render_JSX",
data: {
msg: "HELLO VUE by render JSX"
},
render: function () {
return (
<div>{{ msg }}</div>
)
}
})
</script>

在实际开发中,都采用.vue的单文件组件写法,所以HTML内容固定写法是在<template></tempate>标签内,但此类文件需要安装vue-loader解析插件。

main.jsnew Vue()实例化时,获取全局的APP.vue组件时都采用render()形式。

延伸扩展知识(点击查看)

vue的render(tagName, data, childNode)详解

JSX语法详解

HTML5的template元素:内容模板元素

原生DOM的方法:outerHTML/innerHTML/outerText/innerText/textContent区别

vue-learning:12-vue获取模板内容的方式的更多相关文章

  1. Apache HttpComponents 获取页面内容String方式

    /* * ==================================================================== * Licensed to the Apache S ...

  2. Vue Learning Paths

    Vue Learning Paths Vue Expert refs https://vueschool.io/articles/vuejs-tutorials/exciting-new-featur ...

  3. Vue模板内容

    前面的话 如果只使用Vue最基础的声明式渲染的功能,则完全可以把Vue当做一个模板引擎来使用.本文将详细介绍Vue模板内容 概述 Vue.js使用了基于HTML的模板语法,允许声明式地将DOM绑定至底 ...

  4. Vue(4)- 获取原生的DOM的方式、DIY脚手架、vue-cli的使用

    一.获取原生的DOM的方式 在js中,我们可以通过id.class或者标签获取DOM元素,vue中也为我们提供了获取原生DOM的方法,就是给标签或者组件添加ref属性,通过this.$refs获取,如 ...

  5. SpringBoot + Vue + ElementUI 实现后台管理系统模板 -- 后端篇(一): 搭建基本环境、整合 Swagger、MyBatisPlus、JSR303 以及国际化操作

    相关 (1) 相关博文地址: SpringBoot + Vue + ElementUI 实现后台管理系统模板 -- 前端篇(一):搭建基本环境:https://www.cnblogs.com/l-y- ...

  6. vue 钩子函数中获取不到DOM节点

    原文链接:https://jingyan.baidu.com/article/f96699bbfe9c9d894f3c1b4b.html 两种解决方案: 1:官方解决方案: 受到 HTML 本身的一些 ...

  7. vue新建移动端项目模板

    vue移动端模板 tip: 1.ui我们使用的是vux,庆幸的是,解决了打包过大的问题, 2.这里使用的是rem布局,移动端还是要使用ipad和不同尺寸的手机 3.版本:webpack:3.6.0   ...

  8. vue简介、入门、模板语法

    在菜鸟教程上面学习的vue.js.同时结合vue中文文档网站,便于自己记录. vueAPI网站:API 1. 简介 Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的渐进式框 ...

  9. legend3---10、vue与lavarel的blade模板加jquery页面开发方式比较

    legend3---10.vue与lavarel的blade模板加jquery页面开发方式比较 一.总结 一句话总结: lavarel的blade模板加jquery:速度快一点:速度快一点,页面加载数 ...

随机推荐

  1. C++之以分隔符的形式获取字符串

    void CConvert::Split(const std::string& src, const std::string& separator, std::vector<st ...

  2. 网络流24题 骑士共存(DCOJ8023)

    题目描述 在一个 n*n 个方格的国际象棋棋盘上,马(骑士)可以攻击的棋盘方格如图所示.棋盘上某些方格设置了障碍,骑士不得进入. 对于给定的 n*n 个方格的国际象棋棋盘和障碍标志,计算棋盘上最多可以 ...

  3. PHP验证码文件类

    转自:http://www.blhere.com/1165.html 12345678910111213141516171819202122232425262728293031323334353637 ...

  4. Extended Traffic

    题目链接 题意:有n个路口,m条通路,如果经过一条路则会得到(终点 - 起点)^3的权值,求从1点到其他点的最小权值,如果权值小于3或无法到达输出'?'. 题解:因为权值可能为负,所以用SPFA来解题 ...

  5. phpexcel使用说明5----ThinkPHP+PHPExcel[导入][导出]实现方法

    转自:http://www.thinkphp.cn/code/403.html实现步骤: 注意:phpexcel必须是1.78版本的,不能用1.8以上的 一:去官网http://phpexcel.co ...

  6. 如何实现两个input框的同步更新

    class MVVM { constructor(options) { this.$options = options; this.$el = options.el; this.$data = opt ...

  7. LeetCode120 Triangle

    Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent n ...

  8. Ubuntu18.10创建软件图标

    解压下载包都/opt目录 创建并编辑/usr/share/applications/xxx.desktop [Desktop Entry] Encoding=UTF-8 Name=Pycharm Co ...

  9. qt开发ROS遇到这个问题 find_package(catkin) failed. catkin was neither found in the workspace nor in the CMAKE_PREFIX_PATH...

    为了实现用Qt开发ROS界面开发环境,我几乎参阅了网上所有的配置教程,安装了多个版本的qt,在ubuntu14.04和ubuntu16.04上分别进行了配置,最后都成功了.不得不说的是用QTCREAT ...

  10. 30 Cool Open Source Software I Discovered in 2013

    30 Cool Open Source Software I Discovered in 2013 #1 Replicant – Fully free Android distribution Rep ...