vue toolbar页面无法切换

来源:4-5 动态组件切换

cici哈

2022-12-15

点击不同页面时只显示undefined,页面无法切换

用以下代码时,切换页面会出错。TypeError: Cannot read properties of undefined (reading ‘__asyncLoader’)

'home': () => import('@c/Home.vue'),
'shopping':  () => import('@c/Shopping.vue'),
'my': () => import('@c/My.vue'),

是因为我用vue3的缘故?所以我引用了defineAsyncComponent,然后代码改成

'home': defineAsyncComponent (() =>  import('@c/Home.vue')),
'shopping': defineAsyncComponent (() =>  import('@c/Shopping.vue')),
'my': defineAsyncComponent (() =>  import('@c/My.vue')),

页面切换的时候就没有报错了,但还是显示undefined。请问老师是哪里出了问题呢?

Main.vue
图片描述

ToolBar.vue

<template lang="">
    <div class="tool-bar">
        <!-- tab button,需要一个数据源来驱动此视图-->
        <div class="tool-bar-item" @click="onChangeFragment" v-for="(item, index) in toolBarData" :key="index">
            <!-- 当目前img标签的index===选中tab的index时,img显示高亮图片 -->
            <img class="tool-bar-item-img" :src="[index === selectItemIndex ? item.hIcon : item.nIcon]" />
            <!-- 当目前img标签的index===选中tab的index时,让p添加高亮状态的类-->
            <p class="tool-bar-item-name" :class="{ 'tool-bar-item-name-h': index === selectItemIndex }">{{ item.name }}</p>
        </div>
    </div>
</template>
<script>
/**
 * ToolBar功能
 * 1. 永远位于页面最底部
 * 2. 点击toolbar按钮时,页面发生相应的切换
 * 3. 按钮分为 默认 和选中 两个状态
 * 
 * -----------------
 * 功能和约束
 * 1. 不具备的能力(约束)
 * 2. 通过回调,通知父组件,按钮的点击事件
 * 3. 当按钮被选中,切换按钮状态
 */
export default {
    data: function () {
        return {
            // tab 按钮数据源
            toolBarData: [
                {
                    //默认状态下的图片
                    nIcon: require('@imgs/home-n.svg'),
                    //高亮状态下的图片
                    hIcon: require('@imgs/home-h.svg'),
                    // 名称
                    name: "首页",
                    // 需要展示的组件名称(不同的网页)
                    componentName: 'home'
                },
                {
                    //默认状态下的图片
                    nIcon: require('@imgs/shopping-n.svg'),
                    //高亮状态下的图片
                    hIcon: require('@imgs/shopping-h.svg'),
                    // 名称
                    name: "购物车",
                    // 需要展示的组件名称(不同的网页)
                    componentName: 'shopping'
                },
                {
                    //默认状态下的图片
                    nIcon: require('@imgs/my-n.svg'),
                    //高亮状态下的图片
                    hIcon: require('@imgs/my-h.svg'),
                    // 名称
                    name: "我的",
                    // 需要展示的组件名称(不同的网页)
                    componentName: 'my'
                }
            ],
            // 选中的tab button
            selectItemIndex: 0
        }
    },
    methods: {
        onChangeFragment: function(item, index){
            this.selectItemIndex = index;
            // 向父组件main.vue传递这个function
            this.$emit('onChangeFragment', item.componentName)
        }
    }
}
</script>
写回答

1回答

Sunday

2022-12-15

你好

你的 vue 项目版本是多少?咱们这个课程必须使用 vue2 的

0
2
cici哈
是发现了其他错误,没有问题了,谢谢老师
2022-12-16
共2条回复

混合开发入门 Vue结合Android/iOS开发仿京东项目App

流行的混合开发实战入门,前端和原生开发同学不容错过

1108 学习 · 448 问题

查看课程