el、template、render渲染页面

el、template、render是实例的三个选项,都有各自的作用。相同的是都能作为元素挂载点,本文仅谈论元素挂载点问题。

new Vue({
  el: '#app',
  template: '<div id="temp"> ... </div>',
  render: h => h('div', { attrs: { id: 'rende' } }, '内容')
})

1. el

类型:string | Element
限制:只在用 new 创建实例时生效,组件对象中不能使用。

(1) el提供一个在页面上已存在的 DOM 元素作为 Vue 实例的挂载目标。可以是 CSS 选择器,也可以是一个 HTMLElement 实例。
(2) 如果render函数和template选项都不存在,就会把挂载元素的HTML提取出来用作模板。此时需要使用 runtime-compiler 版Vue库。

<div id="app"></div>

<script>
  new Vue({
    el: '#app'
  })

  //此时相当于:

  new Vue({
    el: '#app',
    template: '<div id="app"></div>'
  })

</script>

2. template

类型:String
限制: new 创建实例以及组件对象中均能使用。

(1) 一个字符串模板作为 Vue 实例的标识使用。模板将会替换挂载的元素。挂载元素的内容都将被忽略,除非模板的内容有分发插槽。
(2) template可以是:

  • id选择器
  • 普通html元素字符串
  • 注册好的组件
// 注册好的组件: my-text

new Vue({
  el: '#app',
  template: '#temp',

  template: '<div id="t">内容</div>',

  template: '<my-text/>'
})

3. render

类型:(createElement: () => VNode) => VNode
限制: new 创建实例以及组件对象中均能使用。

更多细节,详见:https://cn.vuejs.org/v2/guide/render-function.html

(1) render函数可以渲染:

  • 组件对象
  • 普通html元素名
// 组件对象:App

new Vue({
  el: '#app',
  render: h => h(App),

  render: h => h('div', {}, '内容')
})

(2) render函数完整版写法如下:

render: h => h(App)
//完整版
render: function(createElement){
  return createElement(App)
}

(3) 其中,参数createElement也是一个函数,通常把它叫做 h函数,h函数会返回VDom;h函数有三个参数,参数如下:

/*
  参1:String|Object  可以是一个普通的html元素 | 组件对象
  参2:Object         为参1的元素增加相关属性,如class、id、style等
  参3:String|Array   为参1的元素增加内容或子节点
*/
//由于h函数返回的是VDom,在这我使用vue的render返回真实DOM后进行查看
let App = Vue.extend({
    template: '<div>组件对象</div>'
})

//组件对象形式
//渲染后的元素:<div>组件对象</div>
render: function(h){
  return h(App)
}


//普通html形式
render: function(h){
  return h('div', {
    attrs: {id: 'render'},
    class: 'box',
    style: 'color:red'
  }, ['我是文本内容', h('p',{},'我是子元素内容')] )
}
/* 渲染后的元素:

 <div id="render" class="box" style="color:red">
   我是文本内容
   <p>我是子元素内容</p>
 </div>
*/

4. 显示权重

三个选项都可以当做模板,vue会根据如下权重进行选择:
render > template > el

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,200评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,526评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,321评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,601评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,446评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,345评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,753评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,405评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,712评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,743评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,529评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,369评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,770评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,026评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,301评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,732评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,927评论 2 336