1

我没有以正确的方式使用带有@emit 的道具,但我不知道如何修复它。我需要知道正确执行此操作的非全局注册方式(顺便说一下,我对 Vue 完全陌生)..

这是我在文件中的 html parent.vue

<deleteLayoutDialog v-if"showDeleteLayoutDialog"
    :layout-name="dialogNameToDelete
    @confirm="removeLayout(layout-name)"
    @cancel="setShowDeleteLayoutDialog(false)"/>

这是一个定义child.vuedeleteLayoutDialog's prop 和 @emit 的文件:

// html
// <script>
// import { //sth } from 'files'
// @Component({ // components })
export default class DeleteLayoutDialog extends Vue {
    @Prop({required: true, type: String})
    public readonly layoutName: string;

    @Emit()
    public confirm(layoutName: string) {
        // do something
    }
}
</script>

这是我的 javascript(内部parent.vue),其中columnLayoutName似乎有一个NaN值(在 chrome 开发工具中)

public removeLayout(columnLayoutName: string) {
    if (this.columnLayout.name === columnLayoutName) {
        // (this.columnLayout is defined somewhere in this code)
        // do something...
    }
}

我应该如何更改我的htmlremoveLayout以便我正确使用道具?谢谢你。

4

1 回答 1

0

您正在调用removeLayout而不是将其作为参数传递。

@confirm="removeLayout(layout-name)"

您正在尝试在 和 之间进行减法layoutname这可能是未定义的,所以您得到NaN.

只需通过参考

@confirm="removeLayout"
于 2020-04-16T17:58:12.430 回答