码迷,mamicode.com
首页 > 其他好文 > 详细

vue中的页面渲染方案

时间:2017-10-13 20:06:30      阅读:431      评论:0      收藏:0      [点我收藏+]

标签:web   child   ret   abc   item   webp   evel   items   子节点   

一、模板渲染

<div id="J_render_app">
  <ul v-if="items.length">
    <li v-for="item in items">{{ item.name }}</li>
  </ul>
  <p v-else>No items found.</p>
</div>
var vrrapp = new Vue({
  el:"#J_render_app",
  data:{
    items:[
      { name: "vuejs" },
      { name: "angularjs" },
      { name: "reactjs" }
    ]
  }
})

二、组件模板渲染

<div id="J_render_app">
  <ul v-if="items.length">
    <my-li v-for="item in items" :tolearn="item"></my-li>
  </ul>
  <p v-else>No items found.</p>
</div>
Vue.component(‘my-li‘,{
  props:["tolearn"],
  template:‘<li>{{ tolearn.name }}</li>‘
})
var vrrapp = new Vue({
  el:"#J_render_app",
  data:{
    items:[
      { name: "vuejs" },
      { name: "angularjs" },
      { name: "reactjs" }
    ]
  }
})

三、render函数渲染
createElement告诉Vue页面上需要渲染什么样的节点,及其子节点。这些节点是虚拟节点,所有虚拟节点形成虚拟dom。

1、例子

<div id="J_render_app">
  <my-condition></my-condition>
</div>
Vue.component(‘my-condition‘,{
  data:function(){
    return {
      items:[
        {name:"vuejs"},
        {name:"angularjs"},
        {name:"reactjs"}
      ]
    }
  },
  render: function (createElement) {
    if (this.items.length) {
      return createElement(‘ul‘, this.items.map(function (item) {
        return createElement(‘li‘, item.name)
      }))
    } else {
      return createElement(‘p‘, ‘No items found.‘)
    }
  }
})
var vrrapp = new Vue({
  el:"#J_render_app"
})

2、例子

<div id="J_render_app">
  <anchored-heading :level="2">Hello world!</anchored-heading>
</div>

var getChildrenTextContent = function (children) {
  return children.map(function (node) {
    return node.children ? getChildrenTextContent(node.children) : node.text
  }).join(‘‘)
}
Vue.component(‘anchored-heading‘, {
  render: function (createElement) {
    // create kebabCase id
    var headingId = getChildrenTextContent(this.$slots.default)
      .toLowerCase()
      .replace(/\W+/g, ‘-‘)
      .replace(/(^\-|\-$)/g, ‘‘)
    return createElement(
      ‘h‘ + this.level,
      [
        createElement(‘a‘, {
          attrs: {
            name: headingId,
            href: ‘#‘ + headingId
          }
        }, this.$slots.default)
      ]
    )
  },
  props: {
    level: {
      type: Number,
      required: true
    }
  }
})
var vrrapp = new Vue({
  el:"#J_render_app"
})

四、jsx渲染
vue推荐大部分情况下用模板渲染页面,但有时候也需要用render函数。为了更接近模板语法,可以在vue中使用jsx。

vue中的页面渲染方案

标签:web   child   ret   abc   item   webp   evel   items   子节点   

原文地址:http://www.cnblogs.com/camille666/p/vue_dom_render_way.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!