let App = {     template: `       
               
`,     data() {       return {         isShow: false,       };     },     mounted() {       this.isShow = true;    //显示input元素       this.$refs.myInput.focus();  //获取input的焦点     },      };   let vm = new Vue({     el: '#app',     components: {       app: App     },     template: ``,   });

运行后报错:
vuejs里如何获取dom
报错显示focus不存在,原因是 this.$refs.myInput 也是undefined,为什么ref没获取到DOM元素呢?

我们先思考,如果我们把mounted函数内改成:

mounted() {
      this.isShow = true;  
      this.isShow = false;  
      this.isShow = true;  
},

运行过程中,input元素会 先显示,再消失,然后再显示吗?
答案是否定的。因为Vue会先让代码执行完,然后才会根据最终的值,进行DOM操作。 其实上面的代码等同于下面的代码:

mounted() {
      this.isShow = true;  
},

那么怎么解决呢?

这里我们用 $nextTick解决~


vm.$nextTick

什么时候用:在Vue渲染DOM到页面后 立即做某件事,用$nextTick

this.$nextTick(function() {
   ·····dosomething
})

修改版:
let App = {
  template: `
    
           
`,   data() {     return {       isShow: false,     };   },   mounted() {     //显示input元素的瞬间,获取焦点     this.isShow = true;     this.$nextTick(function() {       this.$refs.myInput.focus();       });   },    }; let vm = new Vue({   el: '#app',   components: {     app: App   },   template: ``, });

到此,相信大家对“vuejs里如何获取dom”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!


网站标题:vuejs里如何获取dom
标题路径:http://tjjierui.cn/article/jdojcd.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP