javascript - 为什么 vue-property-decorator @Emit 在 Vue TypeScript 文件中不起作用?

标签 javascript typescript vue.js tsx vue-property-decorator

我正在使用 Typescript 和 Vuejs,我有一个子组件
child.component.tsx

import Vue from 'vue';
import Component from 'vue-class-component';
import { Emit } from 'vue-property-decorator';

@Component({})
export default class ChildComponet extends Vue {


  @Emit('onChangeNumber')
  changeNumber(n: number) {
      return n;
  }

  render() {
    return (
      <div>
        <button onClick={() => this.changeNumber(10)}>Change Number</button>
      </div>
    );
  }
}

parent.component.tsx

import Vue from 'vue';
import Component from 'vue-class-component';
import ChildComponent from './child.component';

@Component({
  ChildComponent
})
export default class ParentComponet extends Vue {

  changeNumber(n: number) {
    console.log(n);
  }

  render() {
    return (
      <div class="item-tab-hub">
        <ChildComponent on-change-number="changeNumber" />
      </div>
    );
  }
}

console.log(n)中没有返回,如何从子组件获取数据到父组件? 谢谢大家!

最佳答案

如果您使用 jsx/tsx格式,on将是 v:on 的关键字/@

对于事件名称,需要使用 kebab-case或者一个奇怪的 camel kebab-case .阅读this issue了解详情。这种行为不会改变,因为贡献者声称它可能会影响其他事件。

parent.component.ts

import Vue from 'vue';
import Component from 'vue-class-component';
import ChildComponent from './child.component';

@Component({
  components: {
    ChildComponent
  }
})
export default class ParentComponet extends Vue {

  changeNumber(n: number) {
    console.log(n);
  }

  render() {
    return (
      <div class="item-tab-hub">
        <ChildComponent on-change-number={this.changeNumber} />
        {/* or use camel kebab case
          <ChildComponent onChange-number={this.changeNumber} />
         */}

      </div>
    );
  }
}

child.component.tsx

import Vue from 'vue';
import Component from 'vue-class-component';
import { Emit } from 'vue-property-decorator';

@Component
export default class ChildComponet extends Vue {

  // ignore the `on-` and use kebab-case
  @Emit('change-number')
  changeNumber(n: number) {
      return n;
  }

  render() {
    return (
      <div> 
        <button onClick={() => this.changeNumber(10)}>Change Number</button>
      </div>
    );
  }
}

关于javascript - 为什么 vue-property-decorator @Emit 在 Vue TypeScript 文件中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68690518/

相关文章:

vue.js - 如何将路由参数作为数字传递?

javascript - Jquery递增/递减票据计数器

javascript - Firebase - 如何从节点中删除单个数据而不删除整个节点

javascript - 数组值传递到 SQL Server IN 查询

vue.js - 为 element-ui 表设置行组件

typescript - 如何在 VS Code 的模板中为 vue Prop 启用 Typescript 类型和智能感知?

javascript - 如何知道 Vue.js 环境是开发环境还是生产环境?

javascript - 即 10 : dragstart event doesn't get fired if <img> is wrapped by <a>

angular - 我应该声明一个变量还是访问对象方法?

angular - 在 Firebase 中保存产品 - 类别未定义