我有一个定制组件<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相关问答推荐

在VueJS中卸载元素之前是否应该删除JavaScript事件收件箱?

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

Nuxt3 / Vue3 - 当属性更改时如何动态更改渲染组件?

Vue.js 3 没有组件的实例?

如何将模板传递给EJS菜单

是否可以将 nuxt3 与类星体框架一起使用

如何对将 DOM 元素附加到 HTML 正文的 Vue 组件进行单元测试?

我是否必须在 Vue 3 中使用 Composition API,还是仍然可以使用Vue 2的方式工作?

在 SPA VueJS 中全局声明 mapState 和 mapMutations

vuejs中通过变量动态调用方法

SVG 加载 vue-svg-loader; [Vue 警告]:无效的组件定义

Vue router路由,Root Vue 没有数据?

VueJS 通过渲染传递数据

Vue CLI 3 sass-resources-loader - Options.loaders 未定义

找不到模块 'babel-core' 但已安装 @babel/core

Vue.js 单向绑定表单

何时使用

Vue 2 转换不起作用

用于身份验证标头的 vue-resource 拦截器

隐藏特定标题及其在 vuetify 数据表中的对应列