Vue v-on:click 对组件不起作用

新手上路,请多包涵

我正在尝试在组件内使用 on click 指令,但它似乎不起作用。当我单击组件时,当我应该在控制台中获得“单击测试”时,什么都不会发生。我在控制台中没有看到任何错误,所以我不知道我做错了什么。

索引.html

 <!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>vuetest</title>
  </head>
  <body>
    <div id="app"></div>
    <!-- built files will be auto injected -->
  </body>
</html>

应用程序.vue

 <template>
  <div id="app">
    <test v-on:click="testFunction"></test>
  </div>
</template>

<script>
import Test from './components/Test'

export default {
  name: 'app',
  methods: {
    testFunction: function (event) {
      console.log('test clicked')
    }
  },
  components: {
    Test
  }
}
</script>

Test.vue(组件)

 <template>
  <div>
    click here
  </div>
</template>

<script>
export default {
  name: 'test',
  data () {
    return {
      msg: 'Welcome to Your Vue.js App'
    }
  }
}
</script>

原文由 Javier Cárdenas 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 930
2 个回答

如果你想在组件的根元素上监听原生事件,你必须对 v-on 使用 .native 修饰符,如下所示:

 <template>
  <div id="app">
    <test v-on:click.native="testFunction"></test>
  </div>
</template>

或者简而言之,正如评论中所建议的,您也可以这样做:

 <template>
  <div id="app">
    <test @click.native="testFunction"></test>
  </div>
</template>

参考阅读更多关于 原生事件

原文由 Saurabh 发布,翻译遵循 CC BY-SA 4.0 许可协议

我认为 $emit 功能更适合我认为您所要求的。它使您的组件与 Vue 实例分离,以便在许多情况下可重用。

 // Child component
<template>
  <div id="app">
    <test @click="$emit('test-click')"></test>
  </div>
</template>

在 HTML 中使用它

// Parent component
<test @test-click="testFunction">

原文由 Jim McNeely 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题