我一直在阅读有关v-model
的帖子,但到目前为止,这些教程令人困惑,并且并没有真正回答我的问题:如何使用v-model
实现双向数据绑定?>
我需要将数据变量绑定到子组件,并且能够从父端和子端更改变量的值。我需要在子组件中放入什么代码,以便在执行<Component v-model="var">
时可以从两侧更新var
?
为此,我宁愿避免使用存储模式,因为它只是需要共享数据的两个组件。
答案 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
进行处理。
使用父级下拉列表更改值将更新该值。也可以从子组件的文本输入中更改值。如果您输入one
,two
或three
,则父选择下拉列表也会相应更新。
答案 2 :(得分:0)