vue中的数据代理

  • 阿里云国际版折扣https://www.yundadi.com

  • 阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

    原理:通过vm对象来代理 Vue 中我们自己定义在data中的数据,
    首先: 我们自己定义的data中的对象或者属性 都会存储到vm中的_data 中进行数据劫持
    其次: 通过Object.defineProperty() 方法的getter 和  setter  将_data中的数据设置到vm本身,从而更方便去使用

    学习  Object.defineProperty()    话不多说直接上图

     1 <template>
    2 <div class="home">
    3 </div>
    4 </template>
    5
    6 <script>
    7 // @ is an alias to /src
    8
    9 export default {
    10 name: 'DefinePropoty',
    11 components: {
    12 },
    13 mounted () {
    14 var that = this
    15 Object.defineProperty(this.person, 'age', {
    16 value: 'boy', // 设置值
    17 enumerable: true, // 可遍历
    18 writable: true, // 是否可以被修改
    19 configurable: true, // 控制是否可以被删除
    20 // 当有人读取age的属性的时候 get就会呗调用 且get的返回值是age的值
    21 get () {
    22 return that.number
    23 },
    24 // 当有人修改age属性的时候 触发 且参数为修改的值
    25 set (val) {
    26 that.number = val
    27 }
    28 })
    29 // this.$delete(this.person, 'sex') 删除对象的属性
    30 // 访问age
    31 console.log(this.person.age)
    32 // 修改age
    33 this.person.age = 666
    34 },
    35 data () {
    36 return {
    37 number: 20,
    38 person: {
    39 name: 'GQ',
    40 sex: '男',
    41 age: this.number
    42 }
    43 }
    44 }
    45 }
    46 </script>

    实例  : 通过 obj2代理obj1

     1 <template>
    2 <div>
    3 <!-- 数据代理 修改一个对象的某个属性另外一个对象也随之改变 -->
    4 </div>
    5 </template>
    6
    7 <script>
    8 export default {
    9 name: 'DataMange',
    10 mounted () {
    11 var that = this
    12 // 给obj2添加一个x属性 有人读取就返
    13 Object.defineProperty(this.obj2, 'x', {
    14 // 有人读取obj2 的x就把obj1的X给他
    15 get () {
    16 return that.obj1.x
    17 },
    18 // 有人修改obj2的x就把obj1的x也修改
    19 set (val) {
    20 that.obj1.x = val
    21 }
    22 })
    23 console.log(that.obj2.x)
    24 that.obj2.x = 6666
    25 console.log(that.obj1.x)
    26 },
    27 data () {
    28 return {
    29 obj1: {
    30 x: 66
    31 },
    32 obj2: {
    33 y: 888
    34 }
    35 }
    36 }
    37 }
    38 </script>
    39
    40 <style lang="scss" scoped>
    41 </style>
  • 阿里云国际版折扣https://www.yundadi.com

  • 阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
    标签: vue

    “vue中的数据代理” 的相关文章

    nodejs如何指定入口文件 - web开发

    今天小编给大家分享一下nodejs如何指定入口文件的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。 默认入口文件当我们通过 n...

    关于新冠的几点总结

    关于新冠的几点总结 一、前言:二、病程阶段1. 第一阶段 反复发热2. 第二极端 退烧虚弱3. 第三阶段 咳嗽嗜睡 三、处置措施:1. 思想准备2. 药/物准备3. 退烧方式4. 保持体温5. 通则不痛,痛则不通6. 营养补充7. 恢复关键期 四、写在最后...

    多标签用户画像分析跑得快的关键在哪里?

    用户画像分析需要使用众多标签来描述用户属性通常有两类标签。一类用户标签的值可能有多个比如用户学历是中学、大学、研究生、博士等年龄段是children、juvenile、youth、middle age、old age这类标签称为枚举标签。另一类用户标签的值只有两个比如用户是否注册、是否活跃、是否白领...

    php如何替换函数并替换一次 - 编程语言

    本篇内容介绍了“php如何替换函数并替换一次”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! PHP中的替换字符串函数一般包括str_repl...

    如何去除TD之间的空隙

    table{border-collapse:collapse;}...

    Vue分页查询如何实现 - 开发技术

    这篇文章主要介绍“Vue分页查询如何实现”,在日常操作中,相信很多人在Vue分页查询如何实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue分页查询如何实现”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!我编写了一个简单的前端页面...