【问题标题】:Vue: linking componentsVue:链接组件
【发布时间】:2018-06-19 01:45:43
【问题描述】:

如果我有一个像这样的TodoList 组件:

<template>
  <div>
    <InputText
        v-model="newTodoText"
        placeholder="New todo"
        @keydown.enter="addTodo"
    />
  ...
</template>

如何更改我的InputText 组件以将文本发送回该组件?

<template>
  <input
    type="text"
    class="input"
  >
</template>

addTodo方法存在,只是不知道如何将InputText中的文字链接回父组件。

【问题讨论】:

    标签: vue.js vuejs2 vue-component


    【解决方案1】:

    keydown.enter 签入您的InputText 组件。然后,你可以做例如@keydown.enter="emitEnterKeyPressed() 改为在您的组件中。在这个emitEnterKeyPressed() 方法中,你可以$emit 一个事件连同文本输入的内容,然后在你的父级中响应这个事件:

    <template>
      <div>
        <InputText
            v-model="newTodoText"
            placeholder="New todo"
            @enter_key_pressed="addTodo"
        />
      ...
    </template>
    

    输入文本:

    <template>
      <input
        type="text"
        class="input"
        v-model="v_model_text"
        @keydown.enter="emitEnterKeyPressed()"
      >
    </template>
    

    您的addTodo 可能看起来像:

    addTodo: function(input_text) {
        //do something with the input_text from TextInput component
    }
    

    你的emitEnterKeyPressed 看起来像:

    emitEnterKeyPressed: function() {
        this.$emit('enter_key_pressed', this.v_model_text);
    }
    

    您想要这样做的原因是因为各个组件应该相当自主地运行以确保可重用性。如果您需要这些组件在彼此之间进行通信,那么为此遵循适当的程序很重要。特别是,父子之间的通信应该通过props 处理并观察其值的变化,而子父之间的通信应该通过$emiting 事件(有或没有数据)处理并使用父方法。

    【讨论】:

    • 我明白你的想法,但我现在只收到[Vue warn]: Property or method "v_model_text" is not defined on the instance but referenced during render. 警告。
    • 您需要在组件中定义适当的数据字段。我强烈建议更深入地查看文档。我还建议尝试以最简单的形式使用 Vue.js,而不使用导入和导出组件,这样您就可以完全了解 Vue 的工作原理,而不会增加额外的复杂性。它应该有助于减轻你的一些困惑。 vuejs.org/v2/guide
    猜你喜欢
    • 2020-01-08
    • 2018-09-05
    • 1970-01-01
    • 2022-12-11
    • 2019-11-18
    • 2019-11-11
    • 1970-01-01
    • 1970-01-01
    • 2018-02-26
    相关资源
    最近更新 更多