Vue 中可以定义组件模版的几种方式


Posted in Javascript onAugust 06, 2019

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

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

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

字符串形式

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

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

模版字面量

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

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

内联模版(inline-template)

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

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

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"
 }
 }
})

渲染函数

渲染函数需要 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', '活动结束')
 }
 }
})

JSX

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

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

单文件组件

使用构建工具 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 中可以定义组件模版的几种方式,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
Js callBack 返回前一页的js方法
Nov 30 Javascript
JQuery中form验证出错信息的查看方法
Oct 08 Javascript
JQuery中阻止事件冒泡几种方式及其区别介绍
Jan 15 Javascript
Jquery弹出层插件ThickBox的使用方法
Dec 09 Javascript
JS实现动态移动层及拖动浮层关闭的方法
Apr 30 Javascript
快速掌握jQuery插件WebUploader文件上传
Nov 07 Javascript
JS敏感词过滤代码
Dec 23 Javascript
vue-cli webpack 引入swiper的操作方法
Sep 15 Javascript
Vue.js 父子组件通信的十种方式
Oct 30 Javascript
layui自定义工具栏的方法
Sep 19 Javascript
LayUI switch 开关监听 获取属性值、更改状态的方法
Sep 21 Javascript
vue实现图片上传预览功能
Dec 23 Javascript
angularjs请求数据的方法示例
Aug 06 #Javascript
通过js示例讲解时间复杂度与空间复杂度
Aug 06 #Javascript
Flutter 超实用简单菜单弹出框 PopupMenuButton功能
Aug 06 #Javascript
JS中如何轻松遍历对象属性的方式总结
Aug 06 #Javascript
VUE组件中的 Drawer 抽屉实现代码
Aug 06 #Javascript
浅入深出Vue之自动化路由
Aug 06 #Javascript
解决vue单页面修改样式无法覆盖问题
Aug 05 #Javascript
You might like
PHP静态类
2006/11/25 PHP
php 不同编码下的字符串长度区分
2009/09/26 PHP
php图片加中文水印实现代码分享
2012/10/31 PHP
PHP中开启gzip压缩的2种方法
2015/01/31 PHP
php定时执行任务设置详解
2015/02/06 PHP
php关键字仅替换一次的实现函数
2015/10/29 PHP
Thinkphp自定义代码生成工具及用法说明(附下载地址)
2016/05/27 PHP
php  PATH_SEPARATOR判断当前服务器系统类型实例
2016/10/28 PHP
详解yii2使用多个数据库的案例
2017/06/16 PHP
TNC vs IO BO3 第二场2.13
2021/03/10 DOTA
下载网站打开页面后间隔多少时间才显示下载链接地址的代码
2010/04/25 Javascript
js 操作select与option(示例讲解)
2013/12/20 Javascript
js设置控件的隐藏与显示的两种方法
2014/08/21 Javascript
javascript中String对象的slice()方法分析
2014/12/20 Javascript
JS使用onerror捕获异常示例
2016/08/03 Javascript
JS+CSS实现下拉刷新/上拉加载插件
2017/03/31 Javascript
Angular2 父子组件数据通信实例
2017/06/22 Javascript
Angular限制input框输入金额(是小数的话只保留两位小数点)
2017/07/13 Javascript
Vue三种常用传值示例(父传子、子传父、非父子)
2018/07/24 Javascript
微信小程序实现蒙版弹窗效果
2018/11/01 Javascript
JS造成内存泄漏的几种情况实例分析
2020/03/02 Javascript
Vue按时间段查询数据组件使用详解
2020/08/21 Javascript
[42:25]EG vs Spirit Supermajor 败者组 BO3 第二场 6.4
2018/06/05 DOTA
Python中获取对象信息的方法
2015/04/27 Python
python中PIL安装简单教程
2016/04/21 Python
python  Django中的apps.py的目的是什么
2018/10/15 Python
python中的列表与元组的使用
2019/08/08 Python
Pycharm+Python+PyQt5使用详解
2019/09/25 Python
详解anaconda安装步骤
2020/11/23 Python
PHP开发工程师面试问题集锦
2012/11/01 面试题
采购员岗位职责
2013/11/15 职场文书
社会实践的活动方案
2014/08/22 职场文书
教学督导岗位职责
2015/04/10 职场文书
Vue的过滤器你真了解吗
2022/02/24 Vue.js
大脑的记忆过程在做数据压缩,不同图形也有共同的记忆格式
2022/04/29 数码科技
使用Python开发贪吃蛇游戏 SnakeGame
2022/04/30 Python