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 相关文章推荐
Java 正则表达式学习总结和一些小例子
Sep 13 Javascript
验证码按回车不变解决方法
Mar 29 Javascript
深入解析JavaScript中函数的Currying柯里化
Mar 19 Javascript
AngularJS中指令的四种基本形式实例分析
Nov 22 Javascript
JavaScript生成图形验证码
Aug 24 Javascript
vue.js中引入vuex储存接口数据及调用的详细流程
Dec 14 Javascript
JavaScript实现数组全排列、去重及求最大值算法示例
Jul 30 Javascript
微信小程序缓存过期时间的使用详情
May 12 Javascript
ES6中let、const的区别及变量的解构赋值操作方法实例分析
Oct 15 Javascript
vue-cli在 history模式下的配置详解
Nov 26 Javascript
Vue中点击active并第一个默认选中功能的实现
Feb 24 Javascript
javascript 函数的暂停和恢复实例详解
Apr 25 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
一个用php3编写的简单计数器
2006/10/09 PHP
让你的网站首页自动选择语言转跳
2006/12/06 PHP
PHP 常用函数库和一些实用小技巧
2009/01/01 PHP
关于js和php对url编码的处理方法
2014/03/04 PHP
ThinkPHP后台首页index使用frameset时的注意事项分析
2014/08/22 PHP
Windows下安装PHP单元测试环境PHPUnit图文教程
2014/10/24 PHP
PHP发送短信代码分享
2015/08/11 PHP
Symfony2创建页面实例详解
2016/03/18 PHP
PHP Oauth授权和本地加密实现方法
2016/08/12 PHP
php fread函数使用方法总结
2019/05/28 PHP
nodejs教程之制作一个简单的文章发布系统
2014/11/21 NodeJs
js实现有时间限制消失的图片方法
2015/02/27 Javascript
JavaScript、tab切换完整版(自动切换、鼠标移入停止、移开运行)
2016/01/05 Javascript
Vue 2.0学习笔记之Vue中的computed属性
2017/10/16 Javascript
jquery引入外部CDN 加载失败则引入本地jq库
2018/05/23 jQuery
Angular中的ng-template及angular 使用ngTemplateOutlet 指令的方法
2018/08/08 Javascript
tracking.js页面人脸识别插件使用方法
2020/04/16 Javascript
详解vue.js移动端配置flexible.js及注意事项
2019/04/10 Javascript
node使用mysql获取数据库数据中文乱码问题的解决
2019/12/02 Javascript
jQuery AJAX应用实例总结
2020/05/19 jQuery
Vue通过provide inject实现组件通信
2020/09/03 Javascript
[19:24]DOTA2客户端使用指南 一分钟快速设置轻松超神
2013/09/24 DOTA
Python函数any()和all()的用法及区别介绍
2018/09/14 Python
python将pandas datarame保存为txt文件的实例
2019/02/12 Python
简单易懂Pytorch实战实例VGG深度网络
2019/08/27 Python
详解python 降级到3.6终极解决方案
2020/02/06 Python
浅析Python迭代器的高级用法
2020/07/16 Python
python 基于DDT实现数据驱动测试
2021/02/18 Python
mui几种页面跳转方式对比总结概括
2017/08/18 HTML / CSS
捐书寄语赠言
2014/01/18 职场文书
幼儿园国庆节活动方案
2014/02/01 职场文书
党校学习心得体会范文
2014/09/09 职场文书
优秀教师事迹材料
2014/12/15 职场文书
openstack中的rpc远程调用的方法
2021/07/09 Python
Nginx动静分离配置实现与说明
2022/04/07 Servers