2022-11-18 09:14:34
字符串形式
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是一套用于构建用户界面的渐进式JavaScript框架,Vue与其它大型框架的区别是,使用Vue可以自底向上逐层应用,其核心库只关注视图层,方便与第三方库和项目整合,且使用Vue可以采用单文件组件和Vue生态系统支持的库开发复杂的单页应用。
Copyright ©2018 陕西烽火云集信息科技有限公司 版权所有 陕ICP备18009853号-1 增值电信业务经营许可证B1-20180802
烽火云集用户注册协议 法律声明及隐私权政策 致烽火云集用户的一封
法务支持:陕西兰天律师事务所