当前位置:   article > 正文

vue的ref属性的相关介绍_this.$refs.focus

this.$refs.focus

操作习惯了DOM,在用vue操作数据时,我们开始常常很不习惯,但是用ref,我们可以将他绑定在想要操作的元素或者组件上,从或者他们的DOM。下面的例子我们都是在vue-cli搭建的项目下,运行的。

1.获取元素的DOM

  1. <template>
  2. <div>
  3. <input placeholder="请输入内容" ref="inputs" />
  4. </div>
  5. </template>
  6. <script type="text/javascript">
  7. export default {
  8. data(){
  9. return {}
  10. },
  11. mounted(){
  12. console.log(this.$refs.inputs.value)
  13. this.$refs.inputs.value = '闹闹';
  14. }
  15. }
  16. </script>

  结果:

  首先我们得知道,处于mounted生命周期的时候,元素才会被创建,这时我们才能获取到input,我们也可以在mounted里面调     用页面加载完成时需要请求的数据。

2.获取组件的DOM

  1. //子组件 与父级同级的TestRefchild.vue文件里面
  2. <template>
  3. <div>
  4. 我是子组件
  5. </div>
  6. </template>
  7. //父组件 TestRef.vue文件
  8. <template>
  9. <div>
  10. <TetsRefchild ref="childs"></TetsRefchild>
  11. <input v-model="input" placeholder="请输入内容" ref="inputs" />
  12. </div>
  13. </template>
  14. <script type="text/javascript">
  15. import TetsRefchild from "./TestRefchild.vue";
  16. export default {
  17. data() {
  18. return {
  19. input: ""
  20. };
  21. },
  22. components: {
  23. TetsRefchild
  24. },
  25. mounted() {
  26. console.log(this.$refs.inputs.value);
  27. this.$refs.inputs.value = "闹闹";
  28. console.log(this.$refs.childs.$el); //<div>我是子组件</div>
  29. console.log(this.$refs.childs.$parents); //undefined
  30. console.log(this.$refs.childs.$children); //[]
  31. console.log(this.$refs.childs.$root); //打印出Vue的根元素app对象
  32. // <div data-v-04c2046b="" id="app"><div data-v-04c2046b=""><div>我是子组件</div>
  33. // <input placeholder="请输入内容"></div></div>
  34. console.log(this.$refs.childs.$root.$el);
  35. console.log(this.$refs.childs.$el.innerHTML); //我是子组件
  36. }
  37. };
  38. </script>

我们console.log(this.$refs.childs),可以在控制台看到如下的结果:

他会打印出一个component对象,里面会有children,parent等属性,其实ref的获取DOM,也是根据父子组件之间的传值,拿到我们想要的值。其中我们注意几点:
       a)  $refs属性,注意后面有一个s,他是获取组件内的元素
       b)  $parent,获取当前组件对象的父组件
       c)  $children,获取子组件
       d)  $root,获取new Vue的实例,即vm
       e)$el,获取对象的DOM元素

3.ref与nextTick的连用
首先我们得知道,vue响应式不是在数据发生改变后,DOM元素立即更新的,他是有一定的机制在里面的,我们这时候可以使用$nextTick,他的作用就是,在 DOM 更新循环结束之后执行延迟回调,在修改数据之后使用 $nextTick,则可以在回调中获取更新后的 DOM。请看下面的例子:

  1. <template>
  2. <div>
  3. <input type="text" v-show="isShow" ref="inputs" />
  4. </div>
  5. </template>
  6. <script>
  7. export default {
  8. data() {
  9. return {
  10. isShow: false
  11. };
  12. },
  13. mounted() {
  14. this.isShow = true;
  15. this.$nextTick(() => {
  16. this.$refs.inputs.value = "闹闹";
  17. this.$refs.inputs.focus();
  18. });
  19. }
  20. };
  21. </script>

   结果:

   截图就是input框内的 value值为‘闹闹’,焦点也会聚焦,但是截图无法截取到,大家可以私下试试。如果我们不在nextTick里面去    执行赋值和聚焦,控制台会报focus undefined错误。所以,当页面加载的时候,将input框显示出来,此时我们去拿DOM元素,    是拿不到的,使用nextTick,让input元素完全被渲染到页面上之后再去操作,这时候就可以拿到值了。

 

   

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/96506
推荐阅读
  

闽ICP备14008679号