当前位置: 首页 > 知识库问答 >
问题:

从子组件中修改props.value

郗鹏
2023-03-14

我是Vue新手,正在尝试构建一个“下拉”组件。我想从父组件使用它,如下所示:

<my-dropdown v-model="selection"></my-dropdown>

其中选择作为数据存储在父节点上,并且应该更新以反映用户的选择。为此,我相信我的下拉组件需要一个valueprop,并且当选择更改时,它需要发出输入事件。

但是,我也想修改从孩子本身,因为我希望能够使用下拉组件本身(我需要修改它,因为否则UI将不会更新以反映新选择的值如果组件自行使用)。

是否有一种方法可以像上面那样绑定v-model,但也可以从子对象内部修改值(似乎我不能,因为value是一个道具,子对象不能修改自己的道具)。

共有3个答案

刘承运
2023-03-14

您可以使用自定义表单输入组件

使用自定义事件形成输入组件

基本上,您的自定义组件应该接受属性,并在值更改时发出输入事件

满俊楠
2023-03-14

Vue的理念是:“放下道具,把事情做好”。它甚至在文档中这样说:组合组件。

组件应该一起使用,最常见的是在父子关系中:组件A可以在自己的模板中使用组件B。他们不可避免地需要相互沟通:父母可能需要将数据传递给孩子,孩子可能需要将孩子身上发生的事情通知父母。然而,通过一个明确定义的接口尽可能地保持父对象和子对象的解耦也是非常重要的。这确保了每个组件的代码可以相对独立地编写和推理,从而使它们更易于维护和重用。

在Vue中,父子组件关系可以概括为道具下降、事件上升。父对象通过道具将数据向下传递给子对象,子对象通过事件向父对象发送消息。让我们看看他们接下来是如何工作的。

不要试图修改子组件中的值。告诉父组件一些事情,如果父组件关心,它可以做一些事情。让孩子们改变事情会给孩子们太多的责任。

丁经国
2023-03-14

对于处理输入/值的局部值,需要有一个计算属性代理。

props: {
  value: {
    required: true,
  }
},
computed: {
  mySelection: {
    get() {
      return this.value;
    },
    set(v) {
      this.$emit('input', v)
    }
  }
}

现在,您可以将模板设置为使用mySelection值来管理此组件内的数据,当它发生更改时,数据将正确发出,并且当您在父级中使用它时,数据始终与v型(selected同步

 类似资料:
  • 我有两个组件:父组件,我想改变子组件的状态: 和子组件: 我需要从父组件更改子组件的打开状态,或者当单击父组件中的按钮时,从父组件调用子组件的toggleMenu()?

  • 本文向大家介绍vue里面父组件修改子组件样式的方法,包括了vue里面父组件修改子组件样式的方法的使用技巧和注意事项,需要的朋友参考一下 在使用 vue 的开发中,我们有时会引用外部组件,包括 UI 组件(ElementUI、iview)。 当 <style> 标签有 scoped 属性时,它的 CSS 只作用于当前组件中的元素。 但是在父组件中添加 scoped 之后,父组件的样式将不会渗透到子组

  • 子组件修改父组件的问题,求助大佬 这里说法是不是矛盾的,是我理解能力不够吗?测试代码,也是,父组件修改子组件能刷新,子组件修改父组件没反应,那个大佬能帮我看看是不是我代码有问题,还是文档有问题: 文档地址:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides... 本文参与了 思否 HarmonyOS 技术问答马拉松,欢迎正在阅

  • 我创建了一个包含登录组件和注册组件的签名页面组件。我的问题是,我如何传递一个onhtml函数从父到子,以便更改我的父组件(签名页组件)的状态?我期望的是,通过单击子组件中的按钮,可以切换父组件的活动状态,并根据活动状态更改样式。我试图通过一个处理功能从父到子,但它不能很好地工作。 有什么解决办法吗? codesandbox中的详细信息:https://codesandbox.io/s/wizard

  • 问题内容: 我有两个组件: 父组件 ,我想从中更改子组件的状态: 和 子组件 : 我需要从父组件更改子组件的 打开 状态,还是单击父组件中的按钮时从父组件调用子组件的 toggleMenu() ? 问题答案: 状态应在父组件中进行管理。您可以通过添加属性将值传输到子组件。

  • 以下是: code>button.jsx的来源并不重要,它有一个常规的HTML单选按钮,触发本机DOM事件 预期流量为: null 尝试:在的onChange处理程序中: 问题: 尝试:在的onChange处理程序中: