$refs,$el,$data,$options区别及用法

1.$refs

作用跟jq的获取dom元素$一样
有三种用法:
1.ref加在普通的元素上,用this.$refs.(ref值)获取到的是dom元素
2.ref加在子组件上,用this.$refs.(ref值)获取到的是组件实例,可以使用组件的所有方法。在使用方法的时候直接this.$refs.(ref值).方法()就可以使用了。
3.如何利用v-for和ref获取一组数组或者dom节点
需要注意的点:
1.通过 :ref=某变量添加ref,如果想获取该ref时需要加[0],如this.$refs[refsArrayItem][0];如果不是 :ref=某变量的方式而是ref=某字符串时则不需要加,如this.$refs[refsArrayItem]
2.ref需要在dom渲染完成之后才会有,在使用的时候确保dom已经渲染完成,比如在生命周期mounted(){}中调用,或者在this.$nextTick(()=>{})中调用。
3.如果ref是循环出来的,有多个重名,那么ref的值会是一个数组,此时要拿到单个的ref只需要循环就可以了。

<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>
注意:如果页面上有多个ref="input1",只返回最后一个

2.$el

获取Vue实例关联的DOM元素
比方说我这里想获取自定义组件tabControl,并获取它的offsetTop,就需要先获取该组件
this.$refs.tabControl 就拿到了该组件,
获取offsetTop,组件不是DOM元素,是没有offsetTop的,无法通过 .offsetTop来直接获取的,就需要通过$el来获取组件中的DOM元素、

this.data=this.$refs.tabControl.$el.offsetTop

3.$data

获取Vue实例的data选项(对象)

4.$options

获取Vue实例的自定义属性(如vm.$options.methods,获取Vue实例的自定义属性methods)

var app   = new Vue({    
        el:"#container",    
        data:{    
                msg:"hello,2018!"    
        },    
        address:"长安西路"    //自定义属性
})    
console.log(app.$el);
返回Vue实例的关联DOM元素,在这里是#container
console.log(app.$data);
返回Vue实例的数据对象data,在这里就是对象{msg:”hello,2018}
console.log(app.$options.address);
返回Vue实例的自定义属性address,在这里是自定义属性address
console.log(app.$refs.hello)
返回含有属性ref = hello的DOM元素(如果多个元素都含有这样的属性,只返回最后一个)<h3 ref = "hello">呵呵 1{{msg}}</h3>

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果在使用 `el-cascader` 组件时,出现 `TypeError: this.$refs.cascader1.clearSelected is not a function` 的错误,可能是因为 `$refs` 中的 `cascader1` 引用的不是 `el-cascader` 组件,或者 `el-cascader` 组件版本过低,不支持 `clearSelected` 方法。 解决方法如下: 1. 确认 `$refs` 中的 `cascader1` 引用的是否是 `el-cascader` 组件。可以在组件的模板中添加 `ref="cascader1"` 属性,然后在 `mounted` 钩子函数中打印 `$refs`,检查是否包含 `cascader1`。 2. 确认 `el-cascader` 组件的版本是否支持 `clearSelected` 方法。可以查看 `el-cascader` 组件的文档或源代码,确认版本是否支持该方法。 如果确认 `cascader1` 引用的是 `el-cascader` 组件,但仍然出现上述错误,可以试着使用 `setSelected` 方法来清空 `el-cascader` 的选中值。具体实现方法如下: ```js this.$refs.cascader1.setSelected([]); ``` 上述代码中,`setSelected` 方法的参数为一个空数组,这将会清空 `el-cascader` 的选中值。 完整示例代码: ```html <template> <div> <el-cascader ref="cascader1" v-model="selectedOptions" :options="options" :props="props" :clearable="true" :change-on-select="true" @change="handleCascaderChange" /> <el-button @click="handleClear">清空</el-button> </div> </template> <script> export default { data() { return { selectedOptions: [], // el-cascader 的 v-model options: [], // el-cascader 的 options props: {} // el-cascader 的 props }; }, methods: { handleCascaderChange(selectedOptions) { console.log(selectedOptions); // 打印选择的选项 }, handleClear() { this.$refs.cascader1.setSelected([]); // 清空 el-cascader 的选中值 } }, mounted() { // 初始化 el-cascader 的 options 和 props this.options = [ { value: 'zhinan', label: '指南', children: [ { value: 'shejiyuanze', label: '设计原则', children: [ { value: 'yizhi', label: '一致' }, { value: 'fankui', label: '反馈' }, { value: 'xiaolv', label: '效率' }, { value: 'kekong', label: '可控' } ] }, { value: 'daohang', label: '导航', children: [ { value: 'cexiangdaohang', label: '侧向导航' }, { value: 'dingbudaohang', label: '顶部导航' } ] } ] } ]; this.props = { value: 'value', label: 'label', children: 'children' }; } }; </script> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值