我有一个定制组件<item>,看起来像这样:

item.vue

<script>
  export default {
    render: function (c) {
      var self = this;
      const contentEl = c('div', {staticClass:'item-content', domProps: {innerHTML: self.content}});
      return c('div', {
        staticClass: 'item',
        class: {
          'item-left': self.side === 'left',
          'item-right': self.side === 'right'
        }
      }, [contentEl])
    },
    props: {
      content: String,
    }
  }
</script>

它可以这样使用:

<item :content="Hello world"></item>

这将打印"Hello world",效果很好,但现在我希望该项目可以像这样点击:

<item v-on:click="myClickEvent" :content="Hello world"></item>

Question:如何使<item>组件在其内部<div>被单击时触发单击事件?

推荐答案

  <template>
    <div id="action-button">
      <input type="button" id="in" @click="clicked" :value="value" />    
    </div>
  </template>

  <script>
  export default {
    name: 'action-button',
    props: {
      'value': String
    },
    methods: {
      clicked () {
        this.$emit('action-button-clicked')
      }
    }
  }
  </script>

然后用v-on:action-button-clicked="handleClick"代替v-on:click.

<action-button v-on:action-button-clicked="handleClick"></action-button>

所以一般的 idea 是在内部处理点击,然后在组件内部使用emit次.

Vue.js相关问答推荐

如何在与父集合相同的读取中取回子集合(或重构数据?)

我在表格中创建了一个包含信息的新行,但在 Cypress e2e 测试中我无法获得最后一行(新行)

vite - 具有相对assets资源 路径的子页面

如何将字符串中的
解析为 VUE.js 中的 html 标记

在 Vue 中启用(控制台)记录路由事件

如何在map中添加新的标记 onclick?

Vuetify - 如何保持第一个扩展面板默认打开,如果我打开另一个面板,其他面板应该关闭?

CLI 3 - 如何为 CSS/Sass 创建vendor bundle ?

Vue @click 不适用于存在 href 的anchor锚标记

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

Vuetify 2 个工具栏和 1 个导航抽屉,navigation drawer导航抽屉上方有 1 个工具栏

Vue 3 组合 API,如何在 setup() 函数中获取上下文父属性?

Vue 3:模块 '"../../node_modules/vue/dist/vue"' 提示

'vue' 未被识别为内部或外部命令

按键删除对象不会更新vue组件

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

使用 Vue 的点击编辑文本字段

IOS在输入焦点上显示键盘

Vue-i18n - 无法读取未定义的属性配置

如何在 vue 组件中使用 vuex?