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动态调整TextArea高度的代码
Dec 28 Javascript
jquery Moblie入门—hello world的示例代码学习
Jan 08 Javascript
javascript中基本类型和引用类型的区别分析
May 12 Javascript
jquery实现邮箱自动填充提示功能
Nov 17 Javascript
jQuery基本过滤选择器用法示例
Sep 09 Javascript
hovertree插件实现二级树形菜单(简单实用)
Dec 28 Javascript
JS中把函数作为另一函数的参数传递方法(总结)
Jun 28 Javascript
jquery validate 实现动态增加/删除验证规则操作示例
Oct 28 jQuery
ES6的异步操作之promise用法和async函数的具体使用
Dec 06 Javascript
bootstrap实现tab选项卡切换
Aug 09 Javascript
微信小程序基于高德地图API实现天气组件(动态效果)
Oct 22 Javascript
vue-cli3配置favicon.ico和title的流程
Oct 27 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/10/09 PHP
php的header和asp中的redirect比较
2006/10/09 PHP
smarty静态实验表明,网络上是错的~呵呵
2006/11/25 PHP
php在线生成ico文件的代码
2007/10/09 PHP
ThinkPHP中order()使用方法详解
2016/04/19 PHP
浅谈php fopen下载远程文件的函数
2016/11/18 PHP
thinkPHP订单数字提醒功能的实现方法
2016/12/01 PHP
JavaScript this调用规则说明
2010/03/08 Javascript
jQuery控制图片的hover效果(smartRollover.js)
2012/03/18 Javascript
js模拟点击事件实现代码
2012/11/06 Javascript
轻松创建nodejs服务器(3):代码模块化
2014/12/18 NodeJs
JS表的模拟方法
2015/02/05 Javascript
js简单实现点击左右运动的方法
2015/04/10 Javascript
javascript实时获取鼠标坐标值并显示的方法
2015/04/30 Javascript
jQuery的框架介绍
2016/05/11 Javascript
Bootstrap开发实战之响应式轮播图
2016/06/02 Javascript
jQuery插件实现图片轮播特效
2016/06/16 Javascript
AngularJS入门教程之多视图切换用法示例
2016/11/02 Javascript
AngularJs基于角色的前端访问控制的实现
2016/11/07 Javascript
新闻上下滚动jquery 超简洁(必看篇)
2017/01/21 Javascript
浅谈Vue初学之props的驼峰命名
2018/07/19 Javascript
创建echart多个联动的示例代码
2018/11/23 Javascript
使用gulp构建前端自动化的方法示例
2018/12/25 Javascript
jQuery实现的鼠标拖动浮层功能示例【拖动div等任何标签】
2018/12/29 jQuery
Vue组件通信中非父子组件传值知识点总结
2019/12/05 Javascript
使用python 爬虫抓站的一些技巧总结
2018/01/10 Python
Python上下文管理器用法及实例解析
2019/11/11 Python
Stella McCartney官网:成衣、包袋、香水、内衣、童装及Adidas系列
2018/12/20 全球购物
个人实习生的自我评价
2014/02/16 职场文书
铲车司机岗位职责
2014/03/15 职场文书
本科毕业生求职自荐信
2014/04/09 职场文书
缓刑人员思想汇报500字
2014/09/12 职场文书
员工工作自我评价
2014/09/26 职场文书
2014年计划生育协会工作总结
2014/11/14 职场文书
高中社区服务活动报告
2015/02/05 职场文书
超详细Python解释器新手安装教程
2021/05/10 Python