q:vue中如何扩展一个组件?
逻辑扩展有:mixins、extends、composition api;
内容扩展有slots;
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Vue Extends 扩展选项title>
<script type="text/javascript" src="https://cdn.bootcss.com/vue/2.6.10/vue.min.js">script>
head>
<body>
<h1>Vue Extends 扩展选项h1>
<hr>
<div id="app">
<p>
{{num}}
p>
<p><button @click="add">addbutton>p>
div>
body>
html>
<script>
// mixxin
const mymixin1 = {
created() {
console.log('我是mixin1中的created')
},
methods:{
//如果方法名一样 他只触发构造器里的方法 扩展不触发 混入选项也一样
add:function(){
this.num++
console.log('我是mixin1中的方法add')
}
}
}
const mymixin2 = {
created() {
console.log('我是mixin2中的created')
}
}
// extends
var extendObj={
updated:function () {
console.log('我是扩展的Update')
},
mounted() {
console.log('我是扩展的mounted')
},
methods:{
//如果方法名一样 他只触发构造器里的方法 扩展不触发 混入选项也一样
add:function(){
this.num++
console.log('我是扩展出来的方法add')
}
}
};
var app = new Vue({
el:'#app',
data:{
num:1
},
created() {
console.log('我是构造器中的created')
},
mounted() {
console.log('我是构造器mounted')
},
updated:function(){
console.log('我是构造器触发的updated')
},
methods:{
add:function(){
this.num++
console.log('我是原生的方法add')
}
},
//扩展不能为数组 混入是为数组,所以扩展只能一个
extends:extendObj,
mixins: [mymixin1, mymixin2]
})
script>
混入的数据和方法不能明确判断来源且可能和当前组件内变量产生命名冲突,vue3中引入的composition api,可以很好解决这些问题,利用独立出来的响应式模块可以很方便的编写独立逻辑并提供响应式的数据,然后在setup选项中组合使用,增强代码的可读性和维护性。例如:
// 复用逻辑1
function useXX() {}
// 复用逻辑2
function useYY() {}
// 逻辑组合
const Comp = {
setup() {
const {xx} = useXX()
const {yy} = useYY()
return {xx, yy}
}
}