vue refs的用法

一般来讲,获取DOM元素,需document.querySelector(".input1")获取这个dom节点,然后在获取input1的值。

但是用ref绑定之后,我们就不需要在获取dom节点了,直接在上面的input上绑定input1,然后$refs里面调用就行。

然后在javascript里面这样调用:this.$refs.input1 这样就可以减少获取dom节点的消耗了

用法如下:

HTML:

<div id="app">
  <input type="text" ref="input1"/>
  <button @click="add">添加</button>
</div>

JS:

<script>
new Vue({
  el: "#app",
  methods:{
  add:function(){
    this.$refs.input1.value ="test"; //this.$refs.input1 减少获取dom节点的消耗
    }
  }
})
</script>

vue $refs的基本用法,具体代码如下所示:

<div id="app">
  <input type="text" ref="input1"/>
  <button @click="add">添加</button>
</div>
 
<script>
new Vue({
  el: "#app",
  methods:{
  add:function(){
    this.$refs.input1.value ="22"; //this.$refs.input1 减少获取dom节点的消耗
    }
  }
})
</script>

一般来讲,获取DOM元素,需document.querySelector(".input1")获取这个dom节点,然后在获取input1的值。

但是用ref绑定之后,我们就不需要在获取dom节点了,直接在上面的input上绑定input1,然后$refs里面调用就行。

然后在javascript里面这样调用:this.$refs.input1  这样就可以减少获取dom节点的消耗了

 

 

原文链接:https://www.jianshu.com/p/e1f4e3ac6606

### Vue.js 中 `refs` 的用法及其与 `focusProps.ref` 的关系 #### 1. Vue.js 中 `refs` 的基本功能 在 Vue.js 中,`refs` 是一个用于直接访问 DOM 元素或子组件实例的机制。通过 `this.$refs`,开发者可以获取到挂载到模板中的元素或组件实例。这种机制常用于需要直接操作 DOM 或调用子组件方法的场景[^1]。 以下是一个简单的例子,展示如何使用 `refs` 来获取 DOM 元素并设置焦点: ```vue <template> <div> <input ref="inputRef" type="text" /> <button @click="setFocus">聚焦</button> </div> </template> <script> export default { methods: { setFocus() { this.$refs.inputRef.focus(); // 使用 ref 获取 DOM 元素并调用 focus 方法 } } }; </script> ``` #### 2. Vue.js 中 `focusProps.ref` 的含义 尽管 Vue.js 官方并未定义 `focusProps.ref` 这一概念,但可以通过组合 `props` 和 `ref` 来实现类似的功能。例如,父组件可以通过 `props` 向子组件传递是否自动聚焦的信息,而子组件则利用 `ref` 来控制具体的行为[^2]。 以下是一个示例,展示如何结合 `props` 和 `ref` 实现条件性聚焦: ```vue <!-- 子组件 --> <template> <input ref="inputRef" type="text" /> </template> <script> export default { props: ['autoFocus'], mounted() { if (this.autoFocus) { this.$refs.inputRef.focus(); // 根据 prop 的值决定是否聚焦[^2] } } }; </script> ``` 父组件可以这样使用: ```vue <template> <child-component :auto-focus="true" /> </child-component> </template> ``` #### 3. 动态生成元素时的注意事项 当使用条件渲染(如 `v-if`)动态生成元素时,直接在 `mounted` 钩子中访问 `this.$refs` 可能会导致问题,因为此时目标元素可能尚未被渲染到 DOM 中。为解决这一问题,可以使用 `this.$nextTick` 确保 DOM 已更新后再执行聚焦操作[^3]。 以下是一个示例: ```javascript this.$nextTick(() => { this.$refs.inputRef.focus(); }); ``` #### 4. 自定义指令实现更灵活的聚焦控制 除了使用 `ref`,Vue.js 还支持通过自定义指令实现更灵活的聚焦逻辑。以下是一个简单的自定义指令示例,用于在元素插入 DOM 后自动聚焦[^4]: ```javascript Vue.directive('focus', { inserted(el) { el.focus(); // 在元素插入 DOM 后自动聚焦[^4] } }); ``` 使用该指令: ```html <input v-focus /> ``` #### 5. 高级场景:结合组合式 API 实现动态焦点控制 在 Vue 3 的组合式 API 中,可以利用 `ref` 和 `onMounted` 等钩子函数实现更复杂的动态焦点控制逻辑。以下是一个示例: ```vue <template> <input ref="inputRef" type="text" /> <button @click="toggleFocus">切换焦点</button> </template> <script> import { ref, onMounted } from 'vue'; export default { setup() { const inputRef = ref(null); const toggleFocus = () => { if (inputRef.value) { inputRef.value.focus(); // 动态控制焦点[^5] } }; onMounted(() => { if (inputRef.value) { inputRef.value.focus(); // 在组件挂载时自动聚焦[^5] } }); return { inputRef, toggleFocus }; } }; </script> ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值