zoukankan      html  css  js  c++  java
  • 记录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>
  • 相关阅读:
    一个iOS图片选择器的DEMO(实现图片添加,宫格排列,图片长按删除,以及图片替换等功能)
    [小细节,大BUG]记录一些小问题引起的大BUG(长期更新....)
    利用runTime,实现以模型为主的字典转模型(注意与KVC的区别)
    项目总结(三)--- 关于版本控制器
    项目总结(一)--- 关于用到的设计模式
    EntityFramework与TransactionScope事务和并发控制
    Entity Framework与ADO.NET批量插入数据性能测试
    Mathtype公式位置偏上
    FreeSWITCH 加载模块过程解读
    FreeSWITCH调用第三方TTS 使用tts_commandline
  • 原文地址:https://www.cnblogs.com/myspecialzone/p/12088236.html
Copyright © 2011-2022 走看看