Vue.js v型和作用域插槽不工作?
我有一个组成部分:Vue.js v型和作用域插槽不工作?,vue.js,vuejs2,Vue.js,Vuejs2,我有一个组成部分: <slot name="test" :name="name"> <input type="text" v-model="name"> </slot> 输入绑定到数据中的名称 当我使用父级中的插槽时: <div slot="test" slot-scope="props"> <input type="text" v-model="props.name"> </div> 数据不会在
<slot name="test" :name="name">
<input type="text" v-model="name">
</slot>
输入绑定到数据中的名称
当我使用父级中的插槽时:
<div slot="test" slot-scope="props">
<input type="text" v-model="props.name">
</div>
数据不会在子级上更新。它没有链接-为什么?您看到的实际上是父级的默认值
。所以你明白我的意思,在两者中添加一些文本,比如:
违约:
实际:
您将看到显示的是默认值
现在,发生这种情况是因为,这似乎是一个bug,当插槽道具与父级道具具有相同的名称时,插槽不起作用
解决方法:重命名插槽道具。
在下面的示例中,我将其从name
重命名为namex
。请注意,默认设置中的v-model
保持不变name
,因为模板中的任何内容都引用该模板的道具(换句话说,插槽道具,例如namex
,在父默认插槽中永远不可用)
违约:
实际:
若要在作用域插槽中使用v-model
,则v-model
的值必须更深一级:
Vue.component('render-props', {
data: () => ({message: 'hello', obj: {msg: 'obj_msg'}}),
template: `<div>
<slot name="a" :message="message">
default: {{message}}
<input v-model="message"/>
</slot>
<slot name="b" :obj="obj">
default: {{obj.msg}}
<input v-model="obj.msg"/>
</slot>
</div>`
});
new Vue({
el: "#root",
template: `<div>
<render-props>
<template v-slot:a="props">
actual: {{props.message}}
<input v-model="props.message"/>
</template>
<template v-slot:b="props">
actual: {{props.obj.msg}}
<input v-model="props.obj.msg"/>
</template>
</render-props>
<cus_2 />
</div>`
});
Vue.component('render-props'{
数据:()=>({message:'hello',obj:{msg:'obj_msg'}}),
模板:`
默认值:{{message}}
默认值:{obj.msg}
`
});
新Vue({
el:“根”,
模板:`
实际:{{props.message}
实际:{{props.obj.msg}
`
});
你不应该修改传递给插槽的数据,漂亮的
就像一个道具。您应该传递一个方法来更改tha
价值始终可以传递对象并修改属性(如
道具)但也不推荐使用
-从
所以我想象一下
<template>
<slot v-bind:value="value"></slot>
</template>
<script>
export default {
name: 'FooBar',
data() {
value: '',
},
methods: {
updateValue(e) {
this.value = e.target.value;
}
},
};
</script>
在子项中编辑时,它不会反映在父项中,或者在父项中编辑时,它不会反映在子项中?在父项中编辑时,它不会影响子项。恐怕这不起作用。即使有了解决方法,模型也不会绑定到子组件。您是否看到正在呈现的
实际:
文本?您不应该修改传递到插槽的道具,而应该将回调作为插槽道具传递,这将修改作为插槽道具传递的数据,这里不是这种情况。
<FooBar v-slot="slotProps">
<input type="text" :value="slotProps.value" @input="slotProps.updateValue" />
</Foobar>