例子:弹幕组件的使用
html
export default {
setup() {
const defaultList = [
{ id: 100, text: '轻量' },
{ id: 101, text: '可定制的' },
{ id: 102, text: '移动端' },
{ id: 103, text: 'Vue' },
{ id: 104, text: '组件库' },
{ id: 105, text: 'VantUI' },
{ id: 106, text: '666' },
];
const list = ref([...defaultList]);
const add = () => {
list.value.push({ id: Math.random(), text: 'Barrage' });
};
return { list, add };
},
};
官网的数据处理部分使用export暴露函数写的这与 setup语法糖有冲突。
html
<script setup>
</script>
解决方案:
去除外层暴露函数及返回。
html
//原数据格式,官网提供。
export default {
setup() {
const defaultList = [
{ id: 100, text: '轻量' },
{ id: 101, text: '可定制的' },
{ id: 102, text: '移动端' },
{ id: 103, text: 'Vue' },
{ id: 104, text: '组件库' },
{ id: 105, text: 'VantUI' },
{ id: 106, text: '666' },
];
const list = ref([...defaultList]);
const add = () => {
list.value.push({ id: Math.random(), text: 'Barrage' });
};
return { list, add };
},
//处理后的,删除可以使用setup语法糖。
const defaultList = [
{ id: 100, text: '轻量' },
{ id: 101, text: '可定制的' },
{ id: 102, text: '移动端' },
{ id: 103, text: 'Vue' },
{ id: 104, text: '组件库' },
{ id: 105, text: 'VantUI' },
{ id: 106, text: '666' },
];
const list = ref([...defaultList]);
const add = () => {
list.value.push({ id: Math.random(), text: 'Barrage' });
};
去除外层
export default {
setup() {
return { list, add }; }, };
然后引用组件就可以愉快的玩耍了
html
<script setup>
const defaultList = [
{ id: 100, text: '轻量' },
{ id: 101, text: '可定制的' },
{ id: 102, text: '移动端' },
{ id: 103, text: 'Vue' },
{ id: 104, text: '组件库' },
{ id: 105, text: 'VantUI' },
{ id: 106, text: '666' },
];
const list = ref([...defaultList]);
const add = () => {
list.value.push({ id: Math.random(), text: 'Barrage' });
};
</script>
<template>
<van-barrage v-model="list" ref="barrage" :auto-play="false">
<div class="video" style="width: 100%; height: 150px"></div>
</van-barrage>
<van-space style="margin-top: 10px">
<van-button @click="add" type="primary" size="small" :disabled="!isPlay">
弹幕
</van-button>
<van-button @click="toggle()" size="small">
{{ isPlay ? '暂停' : '开始' }}
</van-button>
</van-space>
</template>
这个是轮播图的处理例子,其他带数据的组件都可以这样处理。
冲突的原因是setup语法糖已经帮我们对数据进行暴露处理了。