Vue学习-处理边界之访问元素 & 组件


前言

在绝大多数情况下,我们最好不要触达另一个组件实例内部或手动操作 DOM 元素。不过也确实在一些情况下做这些事情是合适的。


一、使用 this.$root 访问根实例

即访问最上层的vue实例,如果是通过vue-cli创建的项目,则是访问的main.js中创建的实例对象。如果实在 < template> 中使用则不需要加this。

代码如下(示例):
main.js ( 这个为根实例-----注:使用vue-cli创建 )

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'

Vue.config.productionTip = false

new Vue({
  data: {
    user: '张三'
  },
  router,
  store,
  render: h => h(App)
}).$mount('#app')

Son.vue ( 这个为子组件 )

<template>
  <div>
    <h2>Son-组件</h2>
    <button @click="getRoot">访问根实例</button>
  </div>
</template>

<script>
export default {
  methods: {
    getRoot() {
      console.log(this.$root);
    }
  }
}
</script>

展示( 图中红线位置就是根实例中的数据 ):
在这里插入图片描述
如果要获取到根实例上的数据则可以之间加上属性名或者方法名,例如:

<template>
  <div>
    <h2>Son-组件</h2>
    <button @click="getRoot">访问根实例</button>
  </div>
</template>

<script>
export default {
  methods: {
    getRoot() {
      console.log(this.$root.user);
    }
  }
}
</script>

在这里插入图片描述

二、使用 this.$parent 访问父实例

如果要访问父实例可以使用 this.$parent 访问父实例。如果实在 < template> 中使用则不需要加this。

代码如下(示例):
Father.vue

<template>
  <div>
    <h1>Father-组件</h1>
    <hr>
    <Son></Son>
  </div>
</template>

<script>
import Son from '@/components/Son.vue'
export default {
  data () {
    return {
      fatherData: 'Father-数据'
    }
  },
  components: {
    Son
  }
}
</script>

Son.vue

<template>
  <div>
    <h2>Son-组件</h2>
    <button @click="getFather">访问父数据</button>
  </div>
</template>

<script>
export default {
  methods: {
    getFather() {
      console.log(this.$parent.fatherData);
    }
  }
}
</script>

效果展示:
在这里插入图片描述

三、使用 this.$children 访问子实例

如果要访问子实例可以使用 this.$children 来进行访问,返回为一个数组

代码如下(示例):
Father.vue

<template>
  <div>
    <h1>Father-组件</h1>
    <button @click="getSon">访问子实例数据</button>
    <hr>
    <Son></Son>
  </div>
</template>

<script>
import Son from '@/components/Son.vue'
export default {
  components: {
    Son
  },
  methods: {
    getSon() {
      console.log(this.$children[0].sonData);
    }
  }
}
</script>

Son.vue

<template>
  <div>
    <h2>Son-组件</h2>
  </div>
</template>

<script>
export default {
  data () {
    return {
      sonData: 'Son-数据'
    }
  }
}
</script>

效果展示:
在这里插入图片描述

四、获取DOM元素

在vue中如果要获取DOM 元素可以不使用javaScript中的方法进行获取,可以使用vue中提供的 hrf 属性进行对一个元素的标识,然后再通过 this.$refs 来获取指定的元素。

代码如下(示例):

<template>
  <div>
    <div ref="dom">这是要被获取的DOM元素</div>
    <button @click="getDom">获取DOM元素并把字体给变为红色</button>
  </div>
</template>

<script>
export default {
  methods: {
    getDom() {
      console.log(this.$refs.dom);
      this.$refs.dom.style.color = 'red';
    }
  }
}
</script>

效果展示:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值