聊一聊Vue组件模版,你知道它有几种定义方式吗?

栏目: JavaScript · 发布时间: 5年前

内容简介:前端组件化开发已经是一个老生常谈的话题了,组件化让我们的开发效率以及维护成本带来了质的提升。当然因为现在的系统越来越复杂庞大,所以开发与维护成本就变得必须要考虑的问题,因此滋生出了目前的三大前端框架 Vue、Angular、React。那今天我们就来看看 Vue 中有哪些定义组件模版的方式以及他们之间的一些差别。

前端组件化开发已经是一个老生常谈的话题了,组件化让我们的开发效率以及维护成本带来了质的提升。

当然因为现在的系统越来越复杂庞大,所以开发与维护成本就变得必须要考虑的问题,因此滋生出了目前的三大前端框架 Vue、Angular、React。

那今天我们就来看看 Vue 中有哪些定义组件模版的方式以及他们之间的一些差别。

1.字符串形式

Vue 最简单直接的一种定义组件模版的方式,但是方式写起来很不友好,就像我们以前拼接 HTML 元素是一样的,很痛苦,所以我们并不常用

Vue.component("my-button", {
  data: function () {
    return {
      label: "是兄弟就来砍我"
    }
  },
  template: "<button>{{label}}</button>"
});
复制代码

2.模版字面量

模版字面量 ES6 语法,与字符串不同的是,我们可以进行多行书写,相对单纯字符串有很大优势,体验更优,但是可能浏览器兼容性会存在问题,需要进行转译为 ES5 语法。

Vue.component("my-content", {
  data: function () {
    return {
      label: "是兄弟就来砍我",
      content: "刀刀暴击"
    }
  },
  template: `
    <div>
      <button>{{ label }}</button>
      <span>{{ content }}</span>
    </div>
  `
});
复制代码

3.内联模版(inline-template)

与 「X-template」模版定义方式被称为模版定义的替代品,把内容定义在组件标签元素的内部,而不是作为 slot 内容分发,方式比较灵活,但是给让我们组件的模版与其他属性分离开。

<my-label inline-template>
  <span>{{label}}</span>
</my-label>
Vue.component('my-label', {
  data: function () {
    return {
      label: "赶紧上车吧,兄die"
    }
  }
})
复制代码

4.X-template

定义一个 <script> 标签,标记 text/x-template 类型,通过 id 链接。

<script type="text/x-template" id="label-template">
    <span>{{label}}</span>
</script>
Vue.component('my-label', {
  template: "#label-template",
  data: function () {
    return {
      label: "赶紧上车吧,兄die"
    }
  }
})
复制代码

5.渲染函数

渲染函数需要 JavaScript 完全的编程能力,而且比模版更接近编译,但需要我们非常熟悉 Vue的实例属性,也会更加的抽象。像 v-if v-for 指令就可以用 JavaScript 语法轻松实现。

Vue.component('my-label', {
  data: function () {
    return {
      items: ['来就送!', '来就送!', '来就送!']
    }
  },
  render: function (createElement) {
    if (this.items.length) {
      return createElement('ul', this.items.map(function (item) {
        return createElement('li', item)
      }))
    } else {
      return createElement('p', '活动结束')
    }
  }
})
复制代码

6.JSX

相比渲染函数的抽象而言,JSX 比较容易一些,对于熟悉 React 的同学是比较友好的。

Vue.component('my-label', {
  data: function () {
    return {
      label: ["活动结束"]
    }
  },
  render(){
    return <div>{this.label}</div>
  }
})
复制代码

7.单文件组件

使用构建工具 cli 创建项目,综合来看单文件组件应该是最好的定义组件的方式,而且不会带来额外的模版语法的学习成本。

<template>
  <div>
    <ul>
      <li v-for="(item, index) in items" :key="index">{{item}}</li>
    </ul>
  </div>
</template>
<script>
export default {
  data() {
    return {
      items: ["我砍", "我砍", "我砍"]
    };
  }
};
</script>
复制代码

以上就是 Vue 中可以定义组件模版的几种方式,有人可能说,我特么要知道这么多干嘛,只要一种不就行了,我想说兄die多知道几种可以帮助我们在不同的条件下做出更好的选择。

比如:你就需要开发一个简单的页面,你非要弄个单文件组件,脚手架跑起来,何必呢,你说对不。

聊一聊Vue组件模版,你知道它有几种定义方式吗?

以上所述就是小编给大家介绍的《聊一聊Vue组件模版,你知道它有几种定义方式吗?》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Java Servlet & JSP Cookbook

Java Servlet & JSP Cookbook

Bruce W. Perry / O'Reilly Media / 2003-12-1 / USD 49.99

With literally hundreds of examples and thousands of lines of code, the Java Servlet and JSP Cookbook yields tips and techniques that any Java web developer who uses JavaServer Pages or servlets will ......一起来看看 《Java Servlet & JSP Cookbook》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换