我有一张单子

<li v-for="menu_item, key in menu" @click="clickMenu(key)" :ref="'menu'+key">
  {{menu_item.name}}
</li>

在我的vue里我有

mounted(){
   // This shows the $refs as being mounted and available
   console.log(this.$refs)
   console.log(this.$refs.menu1)
   // Click menu item 2 seconds after mounting
   this.$refs.menu1.click()
   // click is UNDEFINED

},
methods: {
   clickMenu:function(key){
      console.log("CLICKED "+key)
   },
}

我得到"无法读取未定义的属性'click'"

如何通过编程方式触发对元素的点击?

Github上的另一个答案是我应该...

 this.$refs.menu1.$el.click()

但这也没有定义??

这是一个小插曲

推荐答案

你的代码可能有几个小问题.当使用function() {}时,setTimeout()this的上下文不是你所期望的.为了保留this的上下文,以便能够访问$refs和类似的组件属性/函数,请使用箭头函数代替() => {}.

下一个问题是访问ref的底层元素,比如menu1.我在下面提供了一个示例,但logging this.$refs.menu1返回一个元素数组[<li>].您需要按照this.$refs.menu1[0]来访问底层元素(不过有一种更"Vue"的方式):

{
  // ...
  methods: {
    handleClick(key) {
      console.log(key);
    }
  },
  mounted() {
    console.log(this.$refs);
    console.log(this.$refs.menu1[0]);
    console.log(this);
    setTimeout(() => {
        console.log(this);
        this.$refs.menu1[0].click();
    }, 2000);
  }
}

这里有一个example人在行动.

希望这能有所帮助!

Vue.js相关问答推荐

虚拟DOM在Vue中姗姗来迟

vuejs中如何获取数组总长度

如何在Vue3中使用vuechartjs 5.2从父组件更新图表

将 v-calendar 与以时间和日期格式出现的事件一起使用

VuetifyJS:如何摆脱 v-stepper 组件的提升?

正确使用 Vue $refs

Webpack 你可能需要一个合适的加载器来处理这个文件类型

Vuetify 在数据表中插入操作按钮并获取行数据

如何判断 Vue 组件是否处于活动状态

Vuetify 单选按钮未显示为选中状态

使用 Blade/Mustache 模板混合 Laravel 和 Vue.Js

Javascript/vue.js 接收json

如何禁用 nuxt 默认错误重定向

如何在 VUE 应用中使用 sass?

加载时焦点文本框上的 Vue.js

Import Unexpected identifier + SyntaxError: Unexpected string

使用 Vue.js & DataTable(jquery 插件)

Vue cli 在 css 中构建生产更改不透明度

在 Vuex 模块中进行继承的方法

用于身份验证标头的 vue-resource 拦截器