Vue.js与V模型的双向数据绑定

时间:2019-03-07 05:29:05

标签: vue.js

我一直在阅读有关v-model的帖子,但到目前为止,这些教程令人困惑,并且并没有真正回答我的问题:如何使用v-model实现双向数据绑定?

我需要将数据变量绑定到子组件,并且能够从父端和子端更改变量的值。我需要在子组件中放入什么代码,以便在执行<Component v-model="var">时可以从两侧更新var

为此,我宁愿避免使用存储模式,因为它只是需要共享数据的两个组件。

3 个答案:

答案 0 :(得分:0)

override func drawText(in rect: CGRect) { let size = self.sizeThatFits(UIEdgeInsetsInsetRect(rect, insets).size); super.drawText(in: CGRect.init(origin: CGPoint.init(x: insets.left, y: insets.top), size: size)); } override var intrinsicContentSize: CGSize { var size = super.intrinsicContentSize; if text == nil || text?.count == 0 { return size; } size = self.sizeThatFits(UIEdgeInsetsInsetRect(CGRect.init(origin: CGPoint.zero, size: size), insets).size); size.width += self.insets.left + self.insets.right; size.height += self.insets.top + self.insets.bottom; return size; } 仅仅是单向数据流的抽象。本质上,您的自定义子组件需要做两件事:

  • 接受名为v-model prop
  • 使用新数据发送一个名为value的事件。

因此,您的子组件将像这样使用:

input

在上面的代码中,<child-component :value="myVal" @input="myVal = $event"></child-component> 是一个特殊的模板构造,用于保存子组件作为事件有效负载的一部分发出的数据。 $event事件只是更新 myVal 值,该值将再次通过@input绑定和单向数据流传递给子组件。

现在,这种模式已经重复了很多次,以致Vue.js提供了一个简单的:value语法糖,可以代替上面的代码使用。

v-model

此外,如果由于某种原因,您不想使用<child-component v-model="myVal"></child-component> value作为道具和事件,则可以使用input属性进行更改。这是additional documentation for this

请注意,如果您使用Redux / Vuex,请避免使用model。对于嵌套数据,很有可能您会遇到边缘情况。

答案 1 :(得分:0)

无法使用v-model进行双向数据绑定,因为当您更改子组件中的输入时,您想修改默认行为。

您要使用v-bind显示值,并使用v-on:input将数据传递回父组件。

例如,请参见https://codesandbox.io/s/rj76y5w02o

第一行只是一个只读文本。 “选择”下拉列表是父侧数据变量器,文本框来自子组件。

基本上,您希望数据保留在父侧,并将数据通过props传递给子组件。在子组件中,您要将输入事件传递回父组件,以使用$emit进行处理。

使用父级下拉列表更改值将更新该值。也可以从子组件的文本输入中更改值。如果您输入onetwothree,则父选择下拉列表也会相应更新。

答案 2 :(得分:0)