• 记录vue在实际工作项目中遇到的问题及解决方案


        该篇博客主要记录本人在用vue开发实际项目中遇到的毕竟容易碰到和不易发觉的问题及解决方案,下面所贴的代码来自我做的实际项目。

    如果大家有更好的解决方案欢迎留言评论

    一.tab切换值不显示

        修改前的代码(无关代码已去除),此时来回切换tab,详细信息组件(富文本组件)值不显示

    <template>
      <el-tabs v-model="activeName" @tab-click="handleClick">
        <el-tab-pane label="详细信息" name="exactlyInfo">
           <exactly-info  v-bind="$attrs" ></exactly-info>
        </el-tab-pane>
        <el-tab-pane :label="changeLogTitle" name="changeLog">
            <keep-alive>
                <component ref="changeLog"  v-bind:is="changeLog" "></component>    //动态组件
            </keep-alive>
        </el-tab-pane>
      </el-tabs>
    </template>
    <script>
    const exactlyInfo = resolve => require(['./exactlyInfo.vue'], resolve)  //外部引入组件,富文本组件
    const changeLog= resolve => require(['./changeLog.vue'], resolve)  //外部引入组件
    export default {
        data () {
            return {
                activeName: 'exactlyInfo',
                exactlyInfo,
                changeLog,
            };
        },
        components: {
            'exactly-info': exactlyInfo
        },
        
        methods: {
            handleClick (tab, event) {  //tab切换显示对应组件
                switch (tab.name) {
                case 'exactlyInfo':
                    this.exactlyInfo = exactlyInfo;
                    break;
                case 'changeLog':
                    this.changeLog = changeLog
                    break;
                }
            }
        }
    };
    </script>

     修改后的代码

    <template>
      <el-tabs v-model="activeName" @tab-click="handleClick">
        <el-tab-pane label="详细信息" name="exactlyInfo">
           <exactly-info  v-bind="$attrs"v-if="isShowExactlyInfo"></exactly-info>
        </el-tab-pane>
        <el-tab-pane :label="changeLogTitle" name="changeLog">
            <keep-alive>
                <component ref="changeLog"  v-bind:is="changeLog" "></component>    //动态组件
            </keep-alive>
        </el-tab-pane>
      </el-tabs>
    </template>
    <script>
    const exactlyInfo = resolve => require(['./exactlyInfo.vue'], resolve)  //外部引入组件,富文本组件
    const changeLog= resolve => require(['./changeLog.vue'], resolve)  //外部引入组件
    export default {
        data () {
            return {
                activeName: 'exactlyInfo',
                exactlyInfo,
                changeLog,
                  isShowExactlyInfo: true,
    
            };
        },
        components: {
            'exactly-info': exactlyInfo
        },
        
        methods: {
            handleClick (tab, event) {  //tab切换显示对应组件
                switch (tab.name) {
                case 'exactlyInfo':
                    this.exactlyInfo = exactlyInfo;
                      this.isShowExactlyInfo = true  //新增
                    break;
                case 'changeLog':
                    this.changeLog = changeLog
               this.isShowExactlyInfo = false //新增
                    break;
                }
            }
        }
    };
    </script>

    解决方法:通过vue的v-if控制组件的显示隐藏来达到重新渲染组件效果

     

    二.子组件中的方法先于父组件中的方法执行,导致子组件接收到父组件的值为空。

          解决方法:通过vue的v-if先让父页面默认隐藏,待父页面初始化完成再显示,直接上代码

     

    <template>
        <div v-if="isShowPage"> 
    <child-component :data="parentData"></child-component> //子组件有自己的执行方法和生命周期,可能会先于父组件执行,此时parentData就为空
    </div>
    </template>
    <script>
    export
    default {
    data(){
    reutrn {
    isShowPage:
    false ,
               parentData: {}
             } 
    }
    mounted(){
    this.init() },
    methods:{
    init(){ //初始化方法
    this.parentData={name:'parent'} //父组件给子组件传值
    this.isShowPage=true
    }
    }
    }

    </script>
  • 相关阅读:
    Linux之定时器与时间管理 【转】
    LDAP研究
    Mac中使用svn进行项目管理
    英国调查报告称中国梦吸引力首超美国梦
    怎样删除在Github中创建的项目
    MySQL分组数据
    Eclipse ADT 插件安装慢的解决的方法
    iOS插件化研究之中的一个——JavaScriptCore
    二维码的妙用:通过Zxing实现wifi账号password分享功能
    CF(435D
  • 原文地址:https://www.cnblogs.com/myspecialzone/p/12088236.html
Copyright © 2020-2023  润新知