问答

Vue 组件在哪里声明不需要双向绑定的数据

作者:admin 2021-06-15 我要评论

Vue的data变量都会循环执行绑定setter和getter,为了保证渲染效率,不需要修改的变量使用Object.freeze,但是需要修改的变量使用Object.freeze会有问题,而放在d...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

Vue的data变量都会循环执行绑定setter和getter,为了保证渲染效率,不需要修改的变量使用Object.freeze,但是需要修改的变量使用Object.freeze会有问题,而放在data中会影响效率;要是把变量放在export default 之外,当成局部变量会有问题。

例子:
parent.vue

<template>
  <div>
    <child></child>
    <child></child>
    <child></child>
  </div>
</template>
<script>
import child from './child.vue'
export default{
  components: { child }
}
</script>

child.vue

<template>
  <h3>hello child</h3>
</template>
<script>
let chart;
console.log('chart')
export default{
  created(){
    chart = new Chart()
  }
}
</script>

执行parent.vue的时候只会打印一次chart,因为vue-cli打包的时候,chart被当成了parent.vue中的局部变量,所有子组件共享该局部变量。

有没有好的解决方案?

###

首先确认一个事情,vue中会被数据劫持的只有在初始化实例中已经定义在data函数中的数据,
后续的诸如我们在created这些钩子函数、或者methods等中定义的都不会, 也就是无法双向绑定,除非使用set重新设置, 所以你只要不写在data里面,其他地方比如在钩子函数中定义this.chart = new Chart()都可以实现题主想要的效果

###
export default {
    data () {
        this.staticData = ""; // 这种方式不会被监听
        return {
            // 这里时会被监听的
        }
    }
}

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • Vue 组件在哪里声明不需要双向绑定的数

    Vue 组件在哪里声明不需要双向绑定的数

  • clion项目无法销毁

    clion项目无法销毁

  • laravel  更新或者插入数据 ,生成的sql

    laravel 更新或者插入数据 ,生成的sql

  • 我们的后端吐槽elementUI功能比easyUI

    我们的后端吐槽elementUI功能比easyUI

腾讯云代理商
海外云服务器