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 相关文章推荐
IE DOM实现存在的部分问题及解决方法
Jul 25 Javascript
Jquery.LazyLoad.js修正版下载,实现图片延迟加载插件
Mar 12 Javascript
Angular中使用ui router实现系统权限控制及开发遇到问题
Sep 23 Javascript
JS动态添加的div点击跳转到另一页面实现代码
Sep 30 Javascript
Angular使用操作事件指令ng-click传多个参数示例
Mar 27 Javascript
JS实现统计字符串中字符出现个数及最大个数功能示例
Jun 04 Javascript
ExtJs使用自定义插件动态保存表头配置(隐藏或显示)
Sep 25 Javascript
详解无限滚动插件vue-infinite-scroll源码解析
May 12 Javascript
node 解析图片二维码的内容代码实例
Sep 11 Javascript
layui 上传插件 带预览 非自动上传功能的实例(非常实用)
Sep 23 Javascript
微信公众号H5之微信分享常见错误和问题(小结)
Nov 14 Javascript
vue v-on:click传递动态参数的步骤
Sep 11 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
Terran剧情介绍
2020/03/14 星际争霸
php 攻击方法之谈php+mysql注射语句构造
2009/10/30 PHP
ThinkPHP发送邮件示例代码
2016/10/08 PHP
php显示页码分页类的封装
2017/06/08 PHP
php 生成加密公钥加密私钥实例详解
2017/06/16 PHP
JavaScript语言中的Literal Syntax特性分析
2007/03/08 Javascript
JavaScript Perfection kill 测试及答案
2010/03/23 Javascript
一个简单的js渐显(fadeIn)渐隐(fadeOut)类
2010/06/19 Javascript
Json字符串转换为JS对象的高效方法实例
2013/05/01 Javascript
jQuery实现右侧显示可向左滑动展示的深色QQ客服效果代码
2015/10/23 Javascript
javascript 数据存储的常用函数总结
2017/06/01 Javascript
React Native 使用Fetch发送网络请求的示例代码
2017/12/02 Javascript
解决vue处理axios post请求传参的问题
2018/03/05 Javascript
vue keep-alive请求数据的方法示例
2018/05/16 Javascript
基于webpack4.X从零搭建React脚手架的方法步骤
2018/12/23 Javascript
关于vue状态过渡transition不起作用的原因解决
2019/04/09 Javascript
jQuery 动画与停止动画效果实例详解
2020/05/19 jQuery
[08:54]《一刀刀一天》之DOTA全时刻18:十九支奔赴西雅图队伍全部出炉
2014/06/04 DOTA
[54:19]完美世界DOTA2联赛PWL S2 Magma vs PXG 第二场 11.28
2020/12/01 DOTA
python opencv 直方图反向投影的方法
2018/02/24 Python
python实现创建新列表和新字典,并使元素及键值对全部变成小写
2019/01/15 Python
Django REST framework视图的用法
2019/01/16 Python
PyQt5显示GIF图片的方法
2019/06/17 Python
Python openpyxl读取单元格字体颜色过程解析
2019/09/03 Python
浅谈keras通过model.fit_generator训练模型(节省内存)
2020/06/17 Python
PyTorch之nn.ReLU与F.ReLU的区别介绍
2020/06/27 Python
Python requests HTTP验证登录实现流程
2020/11/05 Python
Java中实现多态的机制是什么?
2014/12/07 面试题
在什么时候需要使用"常引用"
2015/12/31 面试题
Android interview questions
2016/12/25 面试题
大学生农村教师实习自我鉴定
2013/09/21 职场文书
年度评优评先方案
2014/06/03 职场文书
反邪教标语
2014/06/23 职场文书
综合实践活动报告
2015/02/05 职场文书
职场新人刚入职工作总结该怎么写?
2019/05/15 职场文书
写作技巧:优秀文案必备的3种结构
2019/08/19 职场文书