Vue 操作原生Dom refs

获取原生DOM

给标签或组件 添加ref属性

<div ref='alex'></div>
<p ref='a'></p>
<Home ref='b'></Home>

this.$refs.alex  // 获取原生的Dom对象
this.$refs.b   // 获取的是组件的实例化对象

refs属性集合

console.log(this.$refs.input);  // 获取原生DOM
// 返回值  <input type="text">

this.$refs.input.focus(); // 操作原生dom
// 原生dom进行获取焦点操作  focus  js方法获取焦点

console.log(this.$refs.abc);  // 获取abc组件实例对象
// VueComponent?{_uid: 2, _isVue: true, $options: {…}, _renderProxy: Proxy, _self: VueComponent,?…}

// 获取abc子组件的父组件,这里就是当前组件
console.log(this.$refs.abc.$parent);  // 获取父组件 

// 获取abc组件的根组件,也就是原始Vue
console.log(this.$refs.abc.$root); // 获取最原始的Vue 根

// 获取当前组件的子组件,是个列表集合
console.log(this.$children);  // 获取儿子组件

一个测试例子

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="app">

</div>

<script src="../vue.js"></script>
<script>
    Vue.component('Test', {
        data: function () {
            return {}
        },
        template: `
            <div>我是测试组件</div>
        `
    });

    Vue.component('Test2', {
        data: function () {
            return {}
        },
        template: `
            <div>我是测试组件2</div>
        `
    });

    let App = {
        data: function () {
            return {}
        },
        template: `
            <div>
                <input type="text" ref="input">
                <Test ref="abc"/>
                <Test2 ref="efg"/>
            </div>
        `,
        mounted: function () {
            console.log(this.$refs.input);  // 获取原生DOM
            // 原生dom进行获取焦点操作  focus  js方法获取焦点
            this.$refs.input.focus();
            console.log(this.$refs.abc);  // 获取abc组件实例对象
            console.log(this.$refs.abc.$parent);  // 获取父组件
            console.log(this.$refs.abc.$root); // 获取最原始的Vue 根
            console.log(this.$children)  // 获取儿子组件

            // for (let key in this.$refs){
            //     console.log(this.$refs[key]);
            // }
        }
    };

    let vm = new Vue({
        el: '#app',
        data: function () {
            return {}
        },
        template: `
        <App />
        `,
        components: {
            App
        }
    });
</script>
</body>
</html>

原文地址:https://www.cnblogs.com/Hybb/p/12109124.html

时间: 2024-08-30 03:02:46

Vue 操作原生Dom refs的相关文章

Virtual DOM 真的比操作原生 DOM 快吗?

1. 原生 DOM 操作 vs. 通过框架封装操作. 这是一个性能 vs. 可维护性的取舍.框架的意义在于为你掩盖底层的 DOM 操作,让你用更声明式的方式来描述你的目的,从而让你的代码更容易维护.没有任何框架可以比纯手动的优化 DOM 操作更快,因为框架的 DOM 操作层需要应对任何上层 API 可能产生的操作,它的实现必须是普适的.针对任何一个 benchmark,我都可以写出比任何框架更快的手动优化,但是那有什么意义呢?在构建一个实际应用的时候,你难道为每一个地方都去做手动优化吗?出于可维

[前端] VUE基础 (7) (获取原生DOM)

一.获取原生DOM 我们之前在vue中获取原生的DOM,都是利用document来获取的,不是很方便. vue为我们提供了ref属性,来方便的获取标签. <div ref='div1'></div> <p ref='p1'></p> <Home ref='home1'></Home> 获取标签: this.$refs.div1 //获取ref为'div1'的<div>标签 this.$refs.p1 //获取ref为'p1

PHP原生DOM对象操作XML&#39;代码&#39;

对于操作XML类型文件,PHP内置有一套DOM对象可以进行处理.对XML的操作,从创建.添加到修改.删除都可以使用DOM对象中的函数来进行. 创建 创建一个新的XML文件,并且写入一些数据到这个XML文件中. /* * 创建xml文件 */ $info = array( array('obj' => 'power','info' => 'power is shutdown'), array('obj' => 'memcache','info' => 'memcache used t

Jquery的dom操作与原生dom的转换

本片文章包含了 jquery常见dom操作. q与原生dom对象的区别与转换 伪数组对象的知识 如有错误,烦请指正. 增 以下方法共性:可以一次添加多个内容,内容可以是DOM对象.HTML string. jQuery对象 创建元素 var obj = $('<div class="test"><p><span>Done</span></p></div>'); 两种方法可以创建元素 直接写入html 传入一个原生d

dom操作原生js巩固

原生js的dom操作巩固 前言:这玩意其实很简单,但是每次用的时候都有点含糊,故写个文章,每次忘得时候看一看 原生dom操作 1.创建dom元素:createElement(标签名) 2.删除dom元素:removeChild(标签名) 3.在什么元素后添加dom元素:元素.appendChild(标签名) 4.在什么元素前添加dom元素:元素.insertBefore(标签名) 5.替换dom元素:replace(插入的元素,被替换的元素) 6.获取父节点:parentNode 7.获取子节点

原生DOM探究 -- NodeList v.s. HTMLCollection

涉及获取元素的主要API 在获取原生DOM元素的时候,主要涉及这几个DOM API(链接为Living Standard): Node及对应集合NodeList Element(继承Node)及对应集合HTMLCollection Document(继承Node) 注:计划取代NodeList和HTMLCollection的Elements目前并无广泛实现 基础知识 -- NodeList v.s. HTMLCollection 在不同版本的浏览器中,如果使用获取多元素的DOM方法,有的会得到N

【转】原生DOM探究 -- NodeList v.s. HTMLCollection

原文链接:http://www.cnblogs.com/joyeecheung/p/4067927.html 涉及获取元素的主要API 在获取原生DOM元素的时候,主要涉及这几个DOM API(链接为Living Standard): Node及对应集合NodeList Element(继承Node)及对应集合HTMLCollection Document(继承Node) 注:计划取代NodeList和HTMLCollection的Elements目前并无广泛实现 基础知识 -- NodeLis

随机色&原生DOM筛选元素

function colorRandom1(){ var r = Math.floor(Math.random()*51+200); var g = Math.floor(Math.random()*51+200); var b = Math.floor(Math.random()*51+200); return 'rgb('+r+','+g+','+b+')'; } var div = document.body.getElementsByTagName('div')[0]; div.styl

JQ对象和原生DOM对象

相同点:两者本质上都是DOM元素. 不同点:JQ对象是在原生DOM对象上进行了一次封装,使开发人员使用起来更简洁.高效. 两者之间用法也完全不同,很说初学者经常混淆. 其实区分两者并不难, 1.语法不一样,JQ对象都是以$开头的,API也不一样(具体请查询JQ手册).     比如:$('#a').html()    //这样写就可以拿到id 叫 a里面的内容. 如果   $('#a').innerHTML  // 这样写就会报错,而且拿不到任何内容,原因就是$('#a')是JQ对象,而inne