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 相关文章推荐
ExtJs 3.1 XmlTreeLoader Example Error
Feb 09 Javascript
JavaScript类和继承 this属性使用说明
Sep 03 Javascript
js判断是否为数组的函数: isArray()
Oct 30 Javascript
单击复制文字兼容各浏览器的完美解决方案
Jul 04 Javascript
JS对HTML标签select的获取、添加、删除操作
Oct 17 Javascript
js 动态修改css文件的方法
Aug 05 Javascript
基于JS实现密码框(password)中显示文字提示功能代码
May 27 Javascript
JavaScript中定时控制Throttle、Debounce和Immediate详解
Nov 17 Javascript
React根据宽度自适应高度的示例代码
Oct 11 Javascript
Vue组件之Tooltip的示例代码
Oct 18 Javascript
vue中实现methods一个方法调用另外一个方法
Feb 08 Javascript
js+for循环实现字符串自动转义的代码(把后面的字符替换前面的字符)
Dec 24 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代码给图片加水印
2015/07/01 PHP
php实现处理输入转义字符的代码
2015/11/08 PHP
PHP6新特性分析
2016/03/03 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
2017/11/10 PHP
PHP实现的无限分类类库定义与用法示例【基于thinkPHP】
2018/08/06 PHP
js树形控件脚本代码
2008/07/24 Javascript
javascript中的onkeyup和onkeydown区别介绍
2013/04/28 Javascript
js关闭浏览器窗口及检查浏览器关闭事件
2013/09/03 Javascript
原生js做的手风琴效果的导航菜单
2013/11/08 Javascript
js实现日历可获得指定日期周数及星期几示例分享(js获取星期几)
2014/03/14 Javascript
js实现DOM走马灯特效的方法
2015/01/21 Javascript
javascript验证邮件地址和MX记录的方法
2015/06/16 Javascript
jQuery增加自定义函数的方法
2015/07/18 Javascript
浅析JavaScript访问对象属性和方法及区别
2015/11/16 Javascript
4种JavaScript实现简单tab选项卡切换的方法
2016/01/06 Javascript
AngularJS自定义插件实现网站用户引导功能示例
2016/11/07 Javascript
详解Vue Elementui中的Tag与页面其它元素相互交互的两三事
2018/09/25 Javascript
JS实现二维数组元素的排列组合运算简单示例
2019/01/28 Javascript
在VUE中实现文件下载并判断状态的方法
2019/11/08 Javascript
vue引用外部JS的两种种方法
2020/01/28 Javascript
vue 判断页面是首次进入还是再次刷新的实例
2020/11/05 Javascript
合并Excel工作薄中成绩表的VBA代码,非常适合教育一线的朋友
2009/04/09 Python
Python多线程threading模块用法实例分析
2019/05/22 Python
django框架模板语言使用方法详解
2019/07/18 Python
解决Python列表字符不区分大小写的问题
2019/12/19 Python
CSS3 transition 实现通知消息轮播条
2020/10/14 HTML / CSS
欧洲最大的笔和书写专家:The Pen Shop
2017/03/19 全球购物
Artist Guitars新西兰:乐器在线商店
2017/09/17 全球购物
Michael Kors英国官网:美国奢侈品品牌
2019/11/13 全球购物
铭万公司.net面试题笔试题
2014/07/20 面试题
关于青春的演讲稿三分钟
2014/08/22 职场文书
店铺转让协议书
2015/01/29 职场文书
2016年社区综治宣传月活动总结
2016/03/16 职场文书
送给自己的励志语句:要安静的优秀,悄无声息的坚强
2019/11/26 职场文书
浅谈Redis存储数据类型及存取值方法
2021/05/08 Redis
Python爬虫基础之初次使用scrapy爬虫实例
2021/06/26 Python