- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
功能按钮组件:
const Button = createElement('button', {}, [slots().icon ? createElement('span', slots().icon[0].text) : null])
上面使用 Button 的另一个功能组件:
createElement(Button, {}, ['this goes to children'])
但这会呈现文本
this goes to children
不在
span
内当我把它包裹在上面时。
Button
的插槽中来自另一个
createElement()
的组件?
<template>
<Button>
<template #icon>This would be wrapped inside span</template>
</Button>
</template>
更新 1
slot: 'name-of-the-slot'
键入数据属性:
const icon = createElement('span', { slot: 'icon' }, 'text inside span')
createElement(Button, {}, [icon])
没有成功。它甚至有效吗?在 Vue 存储库中创建了一个错误报告:
https://github.com/vuejs/vue/issues/11519
export default {
name: "Wrapper",
functional: true,
render(h) {
return h(Button, { scopedSlots: {
icon: () => h('span', {}, 'its from wrapper')
} });
}
};
export default {
name: "Button",
functional: true,
render(createElement, { scopedSlots }) {
return createElement("button", {}, scopedSlots.icon(null));
}
};
ScopedSlots 是关键。
return createElement("button", {}, scopedSlots.icon ? scopedSlots.icon(null) : null)
最佳答案
使用模板的组件:MyButton.vue
<template>
<div>
<slot name="left"></slot>
<button>
<slot v-bind:person="person">
<span>按钮</span>
</slot>
</button>
<slot name="right" v-bind:age="person.age"></slot>
</div>
</template>
<script>
export default {
name: 'MyButton',
data() {
return {
person: {
name: 'jack',
age: 23,
},
}
},
}
</script>
在模板中使用 MyButton:
<MyButton>
<template #right="{age}">
<span>button rigt side. I am {{ age }} years</span>
</template>
<template v-slot="{ person }">this is a button,{{ person }}</template>
<template #left>
<span>button left side</span>
</template>
</MyButton>
在渲染函数中使用它:
import MyButton from './MyButton.vue'
export default {
name: 'UseButton',
render(h) {
const slotLeft = h('template', { slot: 'left' }, 'in the left of button')
const slotRight = h('template', { slot: 'right' }, 'right')
const slotDefault = h('template', { slot: 'default' }, 'default slot')
const children = [slotRight, slotLeft, slotDefault]
// normal slots in third parms, any order work well
return h(MyButton, {}, children)
},
}
从渲染函数中的作用域槽获取数据:
import MyButton from './MyButton.vue'
export default {
name: 'UseButton',
render(h) {
const slotLeft = h('template', { slot: 'left' }, 'normal slot with name left')
const children = [slotLeft]
return h(
MyButton,
{
// scopedSlot in the second param
scopedSlots: {
// props come from MyButton inside
default: props => {
console.log(props)
const { person } = props
const text = `defaul scopedSlot,${JSON.stringify(person)}`
// use h
return h('span', {}, text)
},
right: props => {
console.log(props)
const { age } = props
// use jsx
return <span>in the right,I am {age} years</span>
},
},
},
// normal slot
children
)
},
}
MyButton.vue
的实现使用 jsx 或 js。
MyButton.jsx
export default {
name: 'MyButton',
data() {
return {
person: {
name: 'jack',
age: 23,
},
}
},
render(h) {
const { left, right, default: _defaultSlot } = this.$scopedSlots
// checek the default exist or not
const defaultSlot = (_defaultSlot && _defaultSlot({ person: this.person })) || <span>按钮</span>
const leftSlot = (left && left()) || ''
const rightSlot = right(this.person)
const button = h('button', {}, [defaultSlot])
// jsx make structure more clear
return (
<div>
{leftSlot}
{button}
{rightSlot}
</div>
)
},
}
使用 jsx 的功能组件:
FunctionalButton.jsx
export default {
name: 'FunctionalButton',
functional: true,
props: {
person: {
type: Object,
default: () => ({ name: 'jack', age: 23 }),
},
},
// NO DATA in functional component
// data() {
// return {
// person: {
// name: 'jack',
// age: 23,
// },
// }
// },
render(h, { props, scopedSlots }) {
const { left, right, default: _defaultSlot } = scopedSlots
const defaultSlot = (_defaultSlot && _defaultSlot({ person: props.person })) || <span>按钮</span>
const leftSlot = (left && left()) || ''
const rightSlot = right(props.person)
const button = h('button', {}, [defaultSlot])
return (
<div>
{leftSlot}
{button}
{rightSlot}
</div>
)
},
}
关于javascript - 如何将内容传递到渲染函数(功能组件)中的插槽 - Vue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62912011/
插槽到底是个啥?5分钟搞定 Vue 插槽 插槽的基本使用 组件使用slot标签,显示组件标签的内容 Title aaa Vu
Closed. This question is not reproducible or was caused by typos。它当前不接受答案。 想改善这个问题吗?更新问题,以便将其作为on-to
我有一个对象,它用一个对象发出信号: MyObj *obj = this->generateObj(); emit newObjSignal(obj); delete obj; 我有一个或多个人与此有
距离ETS的发布也有一段时间,也有不少小伙伴通过ETS制作出很多精美的页面,但在我查阅ETS的组件和API中发现,现有版本的ETS并没有插槽的功能。经过一段时间的探索终于找到曲线救国方式实现插槽
我无法找到有关使用资源管理器模板以编程方式向 WebApp 添加插槽的信息/指南。我的基本配置运行良好,创建了 WebApp 本身、SQL 服务器、SQL DB 等,但我也渴望完成插槽,以便我可以将它
我们的项目位于 sitecore 中,并使用 Azure - 应用服务进行部署。我们已经创建了暂存槽,除了应用程序设置和连接字符串之外,还希望使一些配置文件槽特定(交换时坚持槽)。 有没有办法让整个配
我使用 Azure 插槽功能来部署我的机器人: 部署到“暂存”槽 Azure 启动此实例 启动后,我会交换“生产”和“登台”时段 我想在进行插槽之前测试暂存实例,最好使用 Azure 门户中的 Web
我使用 Azure 插槽功能来部署我的机器人: 部署到“暂存”槽 Azure 启动此实例 启动后,我会交换“生产”和“登台”时段 我想在进行插槽之前测试暂存实例,最好使用 Azure 门户中的 Web
我的应用程序只能通过右键单击托盘图标并按“退出”来退出: class DialogUIAg(QDialog): ... self.quitAction = QAction("&Quit
我不太确定如何将其总结为一个谷歌问题,但也许详细解释它会给我更好的帮助。 我正在尝试找到与在 PHP 中的 python 中设置槽的等价物 python : class Node: slots
我浪费了几个小时试图找出这个错误,但我仍然不知道为什么会发生...所以我求助于你! 我将一个对象移动到一个线程中,该线程执行一些工作,完成后会发出一个信号以供 QMainWindow 捕获。就这么简单
我有一个自旋控件 block ,它可以更改数组的各个元素我不想使用单独的接收器槽函数,而是只想指定哪个控件在信号中发送消息 您可以使用 QSignalMapper 来做到这一点——但是是否可以像下面那
我想知道如何将一个单独的变量传递到一个插槽中。我似乎无法让它工作。有什么办法解决这个问题吗? 这是我的代码: QTimer * timer = new QTimer(); connect(timer,
我有一个基类,它定义了一个 Qt 插槽 class Base { public: Base() { connect(otherobject, SIGNAL(mySign
这是基类中声明的样子: protected: void indexAll(); void cleanAll(); 在派生类中,以下不编译: indexAll(); // OK con
比如我有一个函数 void A::fun() { do_1(); emit signal_1(); do_2(); emit signal_2(); do_3(
我希望能够将视频从连接到我的计算机的摄像头直接流式传输到我通过 PCIE 连接到我的计算机的 FPGA。 我不介意使用 javascript 或 C# 等高级语言来执行此操作(因为这些是我知道的具有视
Qt世界中,事件和信号/槽的区别是什么? 一个会取代另一个吗?事件是信号/槽的抽象吗? 最佳答案 Qt documentation可能解释得最好: In Qt, events are objects,
1. 监听属性值的变化 - watch 语法要求:watch里面的函数名必须跟date里面属性名一致 {{num}} 添加 var
在 Class Buttons 中,我有一个 btnRightClicked 信号和一个 mousePressEvent 插槽: void Buttons::mousePressEvent(QMous
我是一名优秀的程序员,十分优秀!