美文网首页
特殊情况获取实例对象直接修改属性

特殊情况获取实例对象直接修改属性

作者: 未来在奋斗 | 来源:发表于2019-12-03 19:30 被阅读0次

特殊情况 (不要直接去修改人家的数据)

  1. $root 能够获取到根组件的实例对象
  2. $parent 能够获取到父组件的实例对象
  3. $children 能够获取到子组件的实例对象集合
  4. $refs 能够获取到子组件或者元素,
    如果是子组件的话,得到的就是子组件的实例对象
    如果是元素的话,得到的就是元素的DOM对象
  • 先给子组件或者元素做一个标记,通过 ref 属性。ref="box"
  • 这时就可以通过 this.$refs.box 去获取到了。
<div id="app" v-cloak>
    <parent></parent>
  </div>

  <script src="./js/vue.js"></script>
  <script>
    Vue.component('parent', {
      data () {
        return {
          name: '张三丰'
        }
      },
      template: `
        <div>
          <h1 ref="myH1">Parent</h1>
          <p>{{ name }}</p>
          <button @click="fn1">$children 获取子组件们</button>
          <button @click="fn2">$refs 获取子组件与子元素</button>
          <hr />
          <son ref="mySon"></son>
        </div>
      `,

      methods: {
        fn1 () {
        //    console.log(this.$children) 获取子组件的集合
          this.$children[0].name = '张小小三'
        },

        fn2 () {
          // console.log(this.$refs['mySon'])获取子组件通过ref来命名,精准获取可以获取组件与元素
          this.$refs.mySon.name = '张小小三'
          console.log(this.$refs.myH1)

         
        }
      }
    })
    Vue.component('son', {
      data () {
        return {
          name: '张小三'
        }
      },
      template: `
        <div>
          <h1>Son</h1>
          <p>{{ name }}</p>
          <button @click="fn1">$root 获取根组件</button>
          <button @click="fn2">$parent 获取父亲组件</button>
        </div>
      `,

      methods: {
        fn1 () {
          // console.log(this.$root.msg)
          this.$root.msg = 'world'
        },

        fn2 () {
          // console.log(this.$parent.name)
          this.$parent.name = '张小丰'
        },

        fn3 () {
          alert(1111)
        }
      }
    })

    let vm = new Vue({
      el: '#app',
      data: {
        msg: 'hello'
      }
    })
  </script>

相关文章

网友评论

      本文标题:特殊情况获取实例对象直接修改属性

      本文链接:https://www.haomeiwen.com/subject/xgolgctx.html