zoukankan      html  css  js  c++  java
  • Vue中Vue.set()和this.$forceUpdate()的使用

    1.给对象添加一个key值 成功的

    <template>
        <div>
            <p>{{userInfo.name}}</p>
            <p>{{userInfo.sex ?  userInfo.sex : ''}}</p>
            <button @click="updateName">修改userInfo</button>
        </div>
    </template>
    <script>
        export default {
            data(){
                return{
                    userInfo:{name:'小明'}
                }
            },
            methods:{
                updateName(){
                    this.userInfo.name='小红';
                    this.userInfo['sex']='男';//ok
                }
            }
        }
    </script>
    

    2.给对象添加一个key值 失败的

    <template>
        <div>
            <p>{{userInfo.name}}</p>
            <p>{{userInfo.sex ?  userInfo.sex : ''}}</p>
            <button @click="updateName">修改userInfo</button>
        </div>
    </template>
    <script>
        export default {
            data(){
                return{
                    userInfo:{name:'小明'}
                }
            },
            methods:{
                updateName(){
                    this.userInfo['sex']='男';//失败的
                }
            } 
        }
    </script>
    

    3.好奇怪,为啥一个成功一个失败?

    在什么情况下,直接给对象添加一个key值会失败?????
    是在你直接给原来的对象上新增一个key值而且没有修改原来对象上的值如下
    this.userInfo['sex']='男';
    这样的修改肯定会失败的哈
    
    你新增key值的时候;并且改变了原来已经有的key的内容;这样你新增的key值就可以更改成功
    this.userInfo.name=this.userInfo.name+"213";
    this.userInfo['sex']='男';//ok
    
    为啥会这样是因为:
    因为受现代JS的限制,vue不能检测到对象属性的添加或删除。(重要!!!)
    vue不允许在已经创建的实例上动态添加新的根级响应式属性,(注意!!!)
    不过可以使用Vue.set()方法将响应式属性添加到嵌套的对象上。
    

    3.给对象添加key值的两种方式

    <template>
        <div>
            <p>{{userInfo.name}}</p>
            <p>{{userInfo.sex ?  userInfo.sex : ''}}</p>
            <button @click="updateName">修改userInfo</button>
        </div>
    </template>
    <script>
    import Vue from "vue" //Vue.set()的时候需要使用
        export default {
            data(){
                return{
                    userInfo:{name:'小明'}
                }
            },
            methods:{
                updateName(){
                    // this.userInfo['sex']='男'; //失败的
    
                    // 解决方法一:注意要引入Vue
                    // Vue.set(this.userInfo, 'sex' ,'男')
    
                    //解决办法二;不推荐因为消耗性能
                     this.userInfo['sex']='男';
                     this.$forceUpdate()
                }
            }
           
        }
    </script>
    

    4.forceUpdate的讲解

    this.$forceUpdate()
    它可以迫使Vue的实例重新渲染;
    注意它仅仅影响实例本身以及插入插槽内的子组件;并不是所有的子组件
    
    作者:明月人倚楼
    出处:https://www.cnblogs.com/IwishIcould/

    想问问题,打赏了卑微的博主,求求你备注一下的扣扣或者微信;这样我好联系你;(っ•̀ω•́)っ✎⁾⁾!

    如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,或者关注博主,在此感谢!

    万水千山总是情,打赏5毛买辣条行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主(っ•̀ω•́)っ✎⁾⁾!

    想问问题,打赏了卑微的博主,求求你备注一下的扣扣或者微信;这样我好联系你;(っ•̀ω•́)っ✎⁾⁾!

    支付宝
    微信
    本文版权归作者所有,欢迎转载,未经作者同意须保留此段声明,在文章页面明显位置给出原文连接
    如果文中有什么错误,欢迎指出。以免更多的人被误导。
  • 相关阅读:
    jumpserver安装教程
    正则表达式基础->
    Awk基础
    shell脚本练习题->1
    idea开发工具下载安装教程
    shell 数组基础->
    动荡的国庆前后
    Linux命令之查找
    2013年9月游戏测试总结-文档习惯
    将C#程序做成服务后服务自动停止的问题
  • 原文地址:https://www.cnblogs.com/IwishIcould/p/14680505.html
Copyright © 2011-2022 走看看