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+XML 操作
Sep 20 Javascript
让你的博文自动带上缩址的实现代码,方便发到微博客上
Dec 28 Javascript
用按钮控制iframe显示的网页实现方法
Feb 04 Javascript
js图片延迟加载的实现方法及思路
Jul 22 Javascript
Javascript玩转继承(二)
May 08 Javascript
jquery实现无限分级横向导航菜单的方法
Mar 12 Javascript
基于代数方程库Algebra.js解二元一次方程功能示例
Jun 09 Javascript
JavaScript中document.referrer的用法详解
Jul 04 Javascript
JSON创建键值对(key是中文或者数字)方式详解
Aug 24 Javascript
JavaScrip数组删除特定元素的几种方法总结
Sep 06 Javascript
JS对象和字符串之间互换操作实例分析
Feb 02 Javascript
在Koa.js中实现文件上传的接口功能
Oct 08 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
ThinkPHP中I(),U(),$this-&gt;post()等函数用法
2014/11/22 PHP
php实现utf-8转unicode函数分享
2015/01/06 PHP
javascript OFFICE控件测试代码
2009/12/08 Javascript
jquery判断浏览器类型的代码
2012/11/05 Javascript
js实现局部页面打印预览原理及示例代码
2014/07/03 Javascript
推荐 21 款优秀的高性能 Node.js 开发框架
2014/08/18 Javascript
jQuery与Ajax以及序列化
2016/02/01 Javascript
常用的JQuery函数及功能小结
2016/03/24 Javascript
jquery+css实现侧边导航栏效果
2017/06/12 jQuery
React教程之Props验证的具体用法(Props Validation)
2017/09/04 Javascript
ReactNative中使用Redux架构总结
2017/12/15 Javascript
js实现手机web图片左右滑动效果
2017/12/29 Javascript
vue中多路由表头吸顶实现的几种布局方式
2019/04/12 Javascript
深入理解Python中的元类(metaclass)
2015/02/14 Python
python中set常用操作汇总
2016/06/30 Python
Python常见格式化字符串方法小结【百分号与format方法】
2016/09/18 Python
Python实现PS图像调整之对比度调整功能示例
2018/01/26 Python
详解python多线程、锁、event事件机制的简单使用
2018/04/27 Python
matplotlib subplots 调整子图间矩的实例
2018/05/25 Python
python将txt等文件中的数据读为numpy数组的方法
2018/12/22 Python
python误差棒图errorbar()函数实例解析
2020/02/11 Python
Python读取文件内容为字符串的方法(多种方法详解)
2020/03/04 Python
Pycharm中安装Pygal并使用Pygal模拟掷骰子(推荐)
2020/04/08 Python
numpy库ndarray多维数组的维度变换方法(reshape、resize、swapaxes、flatten)
2020/04/28 Python
Django REST 异常处理详解
2020/07/15 Python
django下创建多个app并设置urls方法
2020/08/02 Python
使用HTML5 Canvas绘制直线或折线等线条的方法讲解
2016/03/14 HTML / CSS
html svg生成环形进度条的实现方法
2019/09/23 HTML / CSS
墨尔本最受欢迎的复古风格品牌:Princess Highway
2018/12/21 全球购物
北京鼎普科技股份有限公司软件测试面试题
2012/04/07 面试题
《寓言两则》教学反思
2014/02/27 职场文书
名人演讲稿范文
2014/09/16 职场文书
副总经理党的群众路线教育实践活动个人对照检查材料思想汇报
2014/10/06 职场文书
工作年限证明模板
2014/11/01 职场文书
个性与发展自我评价
2015/03/06 职场文书
幼儿园小班工作总结2015
2015/04/25 职场文书