gpt4 book ai didi

polymer - 如何在 Polymer2 中使用带有数据绑定(bind)的插槽注入(inject)模板

转载 作者:行者123 更新时间:2023-12-03 14:04:07 25 4
gpt4 key购买 nike

我想使用 <slot> 将渲染模板从父组件注入(inject)到子组件插入点。注入(inject)的模板包含对子组件属性的数据绑定(bind)(在本例中为 my-child.data)。

<dom-module id="my-parent">
<template>
<my-child>
<template>
<div>Child's data property: [[data]]</div>
</template>
</my-child>
</template>
...

渲染子组件基本上是这样的:
<dom-module id="my-child">
<template>
<header></header>
<slot></slot>
<footer></footer>
</template>

<script>
class MyChild extends Polymer.Element {
static get is() { return 'my-child'; }
static get properties() {
return {
data: { ... }
};
}
...

我不确定 Polymer2 是否有可能。 Vue2 有个概念叫 "scoped slot"为达到这个。提前感谢您的任何反馈!

最佳答案

数据绑定(bind)默认绑定(bind)在当前绑定(bind)范围内。如果你想改变范围,你必须把你的标记放在 <template> 中。在不同的范围内标记并标记它。

您在问题中的 HTML 代码已经可以了——您实际上将 light DOM 包装在 <template> 中。 , 但是你使用那个 <template>不正确。您不得使用 <slot> ,但必须手动标记该模板并将其插入到 my-child 中的某处元素的影子 DOM。

在这里,您有一个关于如何实现此目的的工作演示:http://jsbin.com/loqecucaga/1/edit?html,console,output

我什至添加了 data属性绑定(bind)到 input元素以证明属性更改也会影响加盖模板。

冲压比较简单,在connectedCallback内完成方法:

var template = this.querySelector('template');
this.__instance = this._stampTemplate(template);
this.$.content.appendChild(this.__instance);

加盖模板放在占位符内 div元素,您将其放在 my-child 中的某处的模板:
<div id="content"></div>

总而言之,这是演示的完整代码:
<link href="polymer/polymer-element.html" rel="import"/>
<link href="polymer/lib/mixins/template-stamp.html" rel="import"/>

<dom-module id="my-parent">
<template>
<my-child>
<template>
<div>Child's data property: [[data]]</div>
</template>
</my-child>
</template>

<script>
class MyParent extends Polymer.Element {
static get is() { return 'my-parent'; }
}

window.customElements.define(MyParent.is, MyParent);
</script>
</dom-module>

<dom-module id="my-child">
<template>
<header>Header</header>
<div id="content"></div>
<footer>Footer</footer>
<input type="text" value="{{data::input}}" />
</template>

<script>
class MyChild extends Polymer.TemplateStamp(Polymer.Element) {
static get is() { return 'my-child'; }
static get properties() {
return {
data: {
type: String,
value: 'Hello, World!'
},
};
}

connectedCallback() {
super.connectedCallback();

var template = this.querySelector('template');
this.__instance = this._stampTemplate(template);
this.$.content.appendChild(this.__instance);
}
}

window.customElements.define(MyChild.is, MyChild);
</script>
</dom-module>

<my-parent></my-parent>

关于polymer - 如何在 Polymer2 中使用带有数据绑定(bind)的插槽注入(inject)模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44412325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com