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

<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>按钮时,控制台上没有任何记录.我知道我错过了一些简单的东西,但我没有得到任何错误.

How do I make my click fire 100

推荐答案

当你这样做的时候:

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

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

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

<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为本机事件(如click:DOM event)传递的默认值

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

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>

Vue.js相关问答推荐

Nuxt 3中间件在部署到Netliy时基于IP国家代码的重定向不起作用

使用插槽的VUE 3工作台

将Vite Vuejs应用部署到Apache服务器

Select 项目后,Vuetify v-select在select后面显示数字1

如何将模板传递给EJS菜单

Vue Js Composition Api 未定义(读取名称)

将 Vue 应用程序挂载到主 Vue 应用程序的容器中

VueJS:为什么在input事件处理程序中触发Input输入事件?

Vuetify Datatable - 在所有列上启用内容编辑

为什么组件在 v-if 下没有被销毁

如何将 ASP.NET Core 2.1 与 Vue CLI 3 集成?

Polyfill for ie

Vue-Router 抽象父路由

为什么 vue 文档说 refs 不是响应式的,而实际上它们是响应式的

如何在 Vue.js 中获取组件元素的 offsetHeight?

动态注册本地 Vue.js 组件

如何将数据传递给 Vue.js 中的路由视图

在 .vue 文件中使用 Vue.set() 和 Vue.use()

Vuetify 过渡:如何设置过渡速度

将鼠标悬停在 TailwindCSS 中的 div 上时显示按钮