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 相关文章推荐
向JavaScript的数组中添加元素的方法小结
Oct 24 Javascript
漫谈JS引擎的运行机制 你应该知道什么
Jun 15 Javascript
jQuery鼠标事件总结
Oct 13 Javascript
Jquery获取radio选中的值
May 05 jQuery
ES6正则表达式的一些新功能总结
May 09 Javascript
Vue v2.5 调整和更新不完全问题
Oct 24 Javascript
JavaScript模块模式实例详解
Oct 25 Javascript
详解如何使用PM2将Node.js的集群变得更加容易
Nov 15 Javascript
详解tween.js 中文使用指南
Jan 05 Javascript
js实现计算器功能
Aug 10 Javascript
vue项目实现多语言切换的思路
Sep 17 Javascript
vue 计算属性和侦听器的使用小结
Jan 25 Vue.js
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/12/30 PHP
php文档工具PHP Documentor安装与使用方法
2016/01/25 PHP
php爬取天猫和淘宝商品数据
2018/02/23 PHP
JavaScript中对象属性的添加和删除示例
2014/05/12 Javascript
jquery实现侧边弹出的垂直导航
2014/12/09 Javascript
JavaScript如何获取数组最大值和最小值
2015/11/18 Javascript
JavaScript代码实现图片循环滚动效果
2020/03/19 Javascript
JS跨域请求外部服务器的资源
2017/02/06 Javascript
Canvas + JavaScript 制作图片粒子效果
2017/02/08 Javascript
原生JavaScript实现Tooltip浮动提示框特效
2017/03/07 Javascript
详解基于vue-cli配置移动端自适应
2018/01/13 Javascript
说说node中的可读流和可写流的区别
2018/06/01 Javascript
webstorm+vue初始化项目的方法
2018/10/18 Javascript
使用webpack搭建vue环境的教程详解
2019/12/31 Javascript
python实现图片文件批量重命名
2020/03/23 Python
python中嵌套函数的实操步骤
2019/02/27 Python
python各类经纬度转换的实例代码
2019/08/08 Python
Python collections模块使用方法详解
2019/08/28 Python
python爬虫爬取幽默笑话网站
2019/10/24 Python
python列表删除和多重循环退出原理详解
2020/03/26 Python
Django框架配置mysql数据库实现过程
2020/04/22 Python
Pytorch损失函数nn.NLLLoss2d()用法说明
2020/07/07 Python
几款好用的python工具库(小结)
2020/10/20 Python
python中的unittest框架实例详解
2021/02/05 Python
草莓网化妆品澳大利亚站:Strawberrynet AU
2017/12/18 全球购物
Bluebella美国官网:英国性感内衣品牌
2018/10/04 全球购物
精美的手工家居和生活用品:Nkuku
2019/11/01 全球购物
2014年情人节活动方案
2014/02/16 职场文书
大学英语专业求职信
2014/06/21 职场文书
教师作风整改措施思想汇报
2014/10/12 职场文书
社区端午节活动总结
2015/02/11 职场文书
幼儿教师辞职信范文
2015/03/02 职场文书
八年级数学教学反思
2016/02/17 职场文书
Python基础之tkinter图形化界面学习
2021/04/29 Python
详解vue中v-for的key唯一性
2021/05/15 Vue.js
vue实现书本翻页动画效果实例详解
2022/04/08 Vue.js