我有一张单子

<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相关问答推荐

在哪里可以找到在线沙箱 Vuetify 3 模板来创建最小的可重现示例?

在 onMounted 之前渲染的 Vue 模板

在 bootstrap-vue 中渲染自定义样式

vue js导航到带有问号的url

如何容器化 Vue.js 应用程序?

vue.js 在 App.vue 中获取路由名称

我可以从手表调用方法并安装吗?

VueJS 将 HTML 打印到页面

eslint – 如何知道 defined定义规则的位置

自定义props类型

如何有条件地更改 vue/vuetify 文本字段 colored颜色

如何在某些路由上隐藏全局组件(例如导航栏)?

在 vue/vuex(/flux?) 中使用 ES6 类是一种反模式吗?

Vue 如何使用 slot 和 slot-props 测试组件

v-if inside v-for - 在两列中显示项目列表

[Vue 警告]:无效的props:propsscrollThreshold的类型判断失败.期望的数字,得到字符串

如何在 Vue.js 应用程序中正确下载 Excel 文件?

错误:找不到模块'@vue/babel-preset-app'

如何在布局中使用组件?

在~/components/AddPlaceModal.vue中找不到导出AddPlaceModal