Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vue.js 有没有办法把一个有范围的插槽从模板缩短到一个有道具的组件?_Vue.js - Fatal编程技术网

Vue.js 有没有办法把一个有范围的插槽从模板缩短到一个有道具的组件?

Vue.js 有没有办法把一个有范围的插槽从模板缩短到一个有道具的组件?,vue.js,Vue.js,我正在组件中使用命名和作用域插槽 以下各项工作完美无瑕: <template #name="s"> <table-cell :value="s.item.name" /> </template> 但我希望类似的事情也能奏效: <table-cell #name="s" :value="s.item.name" /> 它不会给我任何编译错误,但也不会呈现。运行时抛出错误“s”未定义 像这样的事情可能吗?我认为这更像是对v-bind

我正在组件中使用命名和作用域插槽

以下各项工作完美无瑕:

<template #name="s">
    <table-cell :value="s.item.name" />
</template>

但我希望类似的事情也能奏效:

<table-cell #name="s" :value="s.item.name" />

它不会给我任何编译错误,但也不会呈现。运行时抛出错误“s”未定义


像这样的事情可能吗?

我认为这更像是对
v-bind
的限制

Vue正在评估
:value
绑定属性,该属性不在插槽范围内,而是在父级。这就是为什么会出现“s未定义”错误

要使作用域插槽工作,它们首先需要通过DOM层次结构建立作用域,而您并没有给它这样的机会

简言之,你必须坚持


属性存在于父函数作用域中,但作用域插槽的子级将在新函数作用域中传递参数。我不知道答案,但也很好奇,因此尝试Vue的理解

模板:


{{s.item.name}
编译的渲染函数:

函数匿名(){
(这个){
返回(
“表行”,
[
_c(“表格单元格”{
属性:{value:s.item.name},//属性使用父scoope
scopedSlots:\u([
{
键:“名称”,
fn:函数{//子函数获得新的函数作用域
返回[_v(_s(s.item.name))];
},
},
]),
}),
],
1.
);
}
}
如果使用包装在
中的模板:


{{s.item.name}
编译的渲染函数:

函数匿名(){
(这个){
返回_c(“表行”{
scopedSlots:\u([
{
键:“名称”,
fn:功能{
返回[
//整个表格单元在插槽范围内呈现
_c(“表格单元格,{attrs:{value:s.item.name}}[
_v(_s(s.item.name)),
]),
];
},
},
]),
});
}
}

调查之后,我的新问题是:第一个示例为什么有效?
scopedSlots
正在传递给子级,但不知何故最终成为父级的作用域插槽。这是因为Vue中有一些奇特的步法,您可以看到为什么
s
在检查编译的渲染函数时属于父范围。我的答案中包含了编译后的函数。是的,谢谢。你真的为此付出了额外的努力。但愿我能投两次票