Vue中ref的使用

博客对比了jq和Vue操作dom的方式。jq时代主要学习选择器以获取节点查找dom来展示处理数据,Vue则是数据驱动dom,但也提供ref属性获取dom节点。不过在项目开发中,应尽量避免使用ref,因其违背mvvm设计原则。

在jq时代,我们首要任务就是学习选择的使用,因为选择可以极其方便帮助我们获取节点查找dom,因为我们要通过dom展示处理数据。而在Vue中,我们的编程理念发生了变化,变为了数据驱动dom;但有时我们因为某些情况不得不脱离数据操作dom,因此vue为我们提供了 ref 属性获取dom节点;

<body>
    <div id="app">
        <input type="button" value="按钮" @click="get">
        <p ref="ps">211113131</p>
    </div>
</body>
   <script>
        var app=new Vue({
            el:"#app",
            methods: {
                //用来获取具有ref属性的节点对象
                get:function(){
                    alert(this.$refs.ps.innerHTML);
                }
            },
        });
   </script>

但是在项目开发中,尽可能不要使用ref,因为从一定程度上,ref 违背的mvvm设计原则;

Vue中,ref被用来给DOM元素或子组件注册引用信息。若在普通的DOM元素上使用,引用信息就是元素;若在子组件上使用,引用信息就是组件实例。在Vue中直接操作DOM元素,必须用ref属性进行注册[^1]。 ### Vue2中ref使用方法 以下是一个在Vue2中使用ref获取DOM元素的示例代码: ```vue <template> <div id="app"> <div ref="testDom">11111</div> <button @click="getTest">获取test节点</button> </div> </template> <script> export default { methods: { getTest() { console.log(this.$refs.testDom) } } }; </script> ``` 在上述代码中,通过`ref="testDom"`给`div`元素注册引用信息,在`getTest`方法里,使用`this.$refs.testDom`获取该DOM元素并打印到控制台[^1]。 ### Vue3中ref使用方法 以下是Vue3里使用ref获取DOM元素的示例代码: ```vue <template> <div id="app"> <div ref="testDom">11111</div> <button @click="getTest">获取test节点</button> </div> </template> <script> import { ref } from "vue"; export default { setup() { const testDom = ref('') const getTest = () => { console.log(testDom.value); } return { getTest, testDom } }, } </script> ``` 在这个例子中,在`setup`函数里,使用`ref`函数创建一个响应式引用`testDom`,在`getTest`方法中,通过`testDom.value`获取DOM元素并打印到控制台[^1]。 ### ref作用在外部元素上的使用方法 以下是ref作用在外部元素上的示例代码: ```javascript var refoutsidedomTem = { template: "<div class='childComp'><h5>我是子组件</h5></div>" }; var refoutsidedom = new Vue({ el: "#ref-outside-dom", components: { "component-father": refoutsidedomTem }, methods: { consoleRef: function () { console.log(this); console.log(this.$refs.outsideDomRef); } } }); ``` ```html <div id="ref-outside-dom" v-on:click="consoleRef"> <component-father></component-father> <p ref="outsideDomRef">ref在外面的元素上</p> </div> ``` 在这个示例中,在`p`标签上使用`ref="outsideDomRef"`注册引用信息,在`consoleRef`方法里,使用`this.$refs.outsideDomRef`获取该DOM元素并打印到控制台[^2]。 ### ref在v-for中的使用方法 如果`refs`自身的DOM,或父级的DOM是通过`v-for`渲染出来的,Vue框架会把`refInFor`设置成`true`,然后`ref.key`在`registerRef`函数就被设置成数组。示例代码如下: ```vue <template> <div> <div v-for="item in csGroupNameArr" :key="item"> <div ref="arrayDiv"> {{ item }} </div> </div> </div> </template> <script> export default { data() { return { csGroupNameArr: ['item1', 'item2', 'item3'] }; }, mounted() { this.$nextTick(() => { console.log(this.$refs.arrayDiv, 'arrayDiv') }) } }; </script> ``` 在上述代码中,使用`v-for`渲染多个`div`元素,并且给每个`div`元素设置`ref="arrayDiv"`,在`this.$nextTick`回调中,`this.$refs.arrayDiv`会是一个包含所有`div`元素的数组[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值