文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

vuejs里如何获取dom

2023-06-25 13:22

关注

本篇内容主要讲解“vuejs里如何获取dom”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vuejs里如何获取dom”吧!

vuejs获取dom的方法:1、在组件的DOM部分,任意标签中写上“ref="xxx"”;2、通过组件对象“this.$refs.xxx”获取到元素即可。

vuejs里如何获取dom

本文操作环境:windows7系统、vue2.9.6版,DELL G3电脑。

Vue.js实例学习:获取DOM元素

一、获取DOM元素

在Vue中获取DOM元素,我们可以用ref

用法(和React一样):
(1)在组件的DOM部分,任意标签中 写上:ref="xxx"
(2)通过组件对象 this.$refs.xxx 获取到元素

1、获取HTML标签的DOM
例1:
<div id="app"></div><script type="text/javascript">  let App = {    template: `      <div>        <button ref="btn">我是按钮</button>          </div>`,    beforeCreate() {      //这里不能操作数据      console.log('beforeCreate: ', this.$refs.btn);    },    created() {      //这里可以操作数据了      console.log('created: ', this.$refs.btn);    },    beforeMount() {      //new Vue 发生装载, 替换 <div id="app">之前      console.log('beforeMount: ', this.$refs.btn);    },    mounted() {      //装在数据之后      console.log('mounted: ', this.$refs.btn);    },   };  new Vue({    el: '#app',    components: {      app: App    },    template: `<app />`,  });</script>

控制台输出:
vuejs里如何获取dom
说明:mounted()时才能获取this.$refs.btn


2、获取组件的DOM
例2:
<div id="app"></div><script type="text/javascript">  let Temp = {    template: `      <div>我是子组件</div>    `,  };  let App = {    components: {      temp: Temp,    },    template: `<temp ref="tmp"/>`,    mounted() {      console.log(this.$refs.tmp);    },  };  let vm = new Vue({    el: '#app',    components: {      app: App    },    template: `<app />`,  });</script>

控制台输出:
vuejs里如何获取dom
我们看到控制台输出 temp组件
这里我们要关注的是 组件的 各个属性(eg: $ el、$ parent 等)···

假如我们把console.log(this.$refs.tmp)改为:

console.log(this.$refs.tmp.$el);

控制台会输出下图,由此可知 $el 代表着什么~
vuejs里如何获取dom

总结:

二、给DOM元素添加事件的特殊情况

例:

要求:在显示input元素的瞬间,获取input的焦点

<div id="app"></div><script type="text/javascript">  let App = {    template: `      <div>        <input type="text" v-if="isShow" ref="myInput" />      </div>`,    data() {      return {        isShow: false,      };    },    mounted() {      this.isShow = true;    //显示input元素      this.$refs.myInput.focus();  //获取input的焦点    },     };  let vm = new Vue({    el: '#app',    components: {      app: App    },    template: `<app />`,  });</script>

运行后报错:
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: `    <div>      <input type="text" v-if="isShow" ref="myInput" />    </div>`,  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: `<app />`,});

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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯