Typescript vue类组件语法中vue模型的计算getter/setter(因此为“props”)
在thread中,我学习了如何链接父组件和子组件Typescript vue类组件语法中vue模型的计算getter/setter(因此为“props”),typescript,vue.js,vuejs2,vue-class-components,vue-property-decorator,Typescript,Vue.js,Vuejs2,Vue Class Components,Vue Property Decorator,在thread中,我学习了如何链接父组件和子组件v-model。最重要的是: ---父模板: --子模板: --儿童脚本: 计算:{ 本地值:{ 得到(){ 返回此.value; }, 设置(本地值){ 这是。$emit('input',localValue); }, }, }, 不幸的是,我无法将其重新写入语法。以下代码既不起作用,也不应起作用: 导出默认类TextEditor扩展Vue{ @Prop({type:String,required:true})私有只读值!:String; pr
v-model
。最重要的是:
---父模板:
--子模板:
--儿童脚本:
计算:{
本地值:{
得到(){
返回此.value;
},
设置(本地值){
这是。$emit('input',localValue);
},
},
},
不幸的是,我无法将其重新写入语法。以下代码既不起作用,也不应起作用:
导出默认类TextEditor扩展Vue{
@Prop({type:String,required:true})私有只读值!:String;
private get localValue():字符串{
返回此.value;
}
私有集localValue(newValue:string){
这是.$emit(“输入”,newValue);
}
}
问题的答案不适用于vue组件属性,因为属性是只读的。因此我无法编写this.value=newValue
直接值的使用有问题##
@组件({
组成部分{
编辑器实现:CK_Editor.component
}
})
导出默认类TextEditor扩展Vue{
@Prop({type:String,required:true})私有只读值!:String;
@发出(“输入”)
专用onInput(值:字符串):void{
控制台日志(“检查点”);
console.log(this.value);
}
}
假设初始值为空字符串
输入“f”
日志将是“检查点”
检查点“f”
依此类推。目前,您似乎从父级获取了一个输入值,然后更改该值,并将该值发送回父级。这似乎是一种反模式 请试试这个 您的EditorImplementation组件将类似于
@属性({默认值:'})只读值!:string
我认为这不是最好的解决方法。你不应该直接改变道具。为什么不能直接将值
道具放入模板中呢。托尼,谢谢你的回答。使用EditorImplementation(:value=“value”@input=“(value)=>{onInput(value)}”)
,在@Emit(“input”)私有onInput(value:string)中:void{console.log(this.value);}
我总是使用前面的值获得输出,而不是实际值。例如。在第一次输入时,值
仍然是空字符串。正常吗?嗨,请编辑帖子并添加此功能以提高可读性。@Tony,收到,完成。谢谢你的回答。因此,值
在文本编辑器
中不会随本地值
而改变,不是吗?文档中是否对此进行了解释?使用localValue
,您可以使用v-model更改文本输入的值(这确保了双向绑定)。您可以看到有关如何在自定义组件上使用v-model的更多信息(这就是编辑实现
组件。显示了v-model如何与html元素一起使用。关于道具更改,您可以从技术上更改子组件中的道具,但更改值(在子组件中更改)如果父组件中的值发生更改,则将被忽略,这就是为什么不鼓励这样做。在这种情况下,您似乎希望将值从子组件发送到父组件。使用v-model,您可以更改子组件中输入的文本的值,并将值发送到父组件,而无需担心abo好的,谢谢你的解释!我接受了你的回答。