Vue.js:简单的点击功能不触发

新手上路,请多包涵

我有一个非常简单的应用程序:

 <div id="show_vue">
    <page-change page="bio" @click="changeThePage"></page-change>
    <page-change page="health" @click="changeThePage"></page-change>
    <page-change page="finance" @click="changeThePage"></page-change>
    <page-change page="images" @click="changeThePage"></page-change>
</div>

Vue.component("page-change", {
    template: "<button class='btn btn-success'>Button</button>",
    props: ["page"]
})

var clients = new Vue({
    el: '#show_vue',
    data: {
        currentRoute: window.location.href
    },
    methods: {
        changeThePage: function() {
            console.log("this is working")
        }
    }
})

…但是当我单击 <page-change></page-change> 按钮时,控制台没有记录任何内容。我知道我错过了一些简单的东西,但我没有收到任何错误。

如何让我的点击触发 changeThePage

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

阅读 306
2 个回答

当你这样做:

 <page-change page="bio" @click="changeThePage"></page-change>

这意味着您正在等待 page-change 组件发出 click 事件。

最佳解决方案(感谢@aeharding):使用 .native 事件修饰符

<page-change page="bio" @click.native="changeThePage"></page-change>

解决方案 1:从子组件发出点击事件:

 Vue.component("page-change", {
    template: "<button @click='clicked' class='btn btn-success'>Button</button>",
    props: ["page"],
    methods: {
       clicked: function(event) {
         this.$emit('click', this.page, event);
       }
    }
})

有关信息 event 是 Vue 为原生事件传递的默认值,例如 clickDOM 事件

解决方案 2:直接从父组件发出:

 Vue.component("page-change", {
    template: "<button class='btn btn-success'>Button {{ page }}</button>",
    props: ["page"]
})

var clients = new Vue({
    el: '#show_vue',
    data: {
        currentRoute: window.location.href,
        pages: [
          'bio', 'health',
          'finance', 'images'
        ]
    },
    methods: {
        changeThePage: function(page, index) {
            console.log("this is working. Page:", page, '. Index:', index)
        }
    }
});
 <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.2.5/vue.js"></script>
<div id="show_vue">

  <span v-for="(page, index) in pages" :key="index+page"
        @click="changeThePage(page, index)">

    <page-change :page="page"></page-change>

  </span>

</div>

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

最好的方法是使用 .native 事件修饰符。

例如:

 <my-custom-component @click.native="login()">
  Login
</my-custom-component>

来源: https ://v2.vuejs.org/v2/guide/components.html#Binding-Native-Events-to-Components

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

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