Use properties or slot for pass data to child element
I've a question about what it is the best way to pass some value from a father component to a child component and show the value, because I've tried to pass value with properties and slot and both ways work.
Properties: I've a movement list and use repeat
from lit-html (and method html
to render) in the father component in order to create n child component giving the values in them properties.
//father component
render(){
return html`
${repeat(movements, movement => movement.id, (movement, index)=> html`
<movement
.id=${movement.id} .description=${movement.description} .amount=${movement.amount} .balance=${movement.balance}>
</movement>
<hr>
`)}
`
}
//child component
render(){
return html`
<dt>${this.id}</dt>
<dl>${this.description}</dl>
<dl>${this.amount}</dl>
<dl>${this.balance}</dl>
`;
}
Slot: I've a movement list and use repeat
from lit-html (and method html
to render) in the father component in order to create n child component giving the values in slot which were declared in the child component
//child component
render(){
return html`
<dd>
<slot name="id"></slot>
<slot name="description"></slot>
<slot name="amount"></slot>
<slot name="balance"></slot>
</dd>
`;
}
//father component
render(){
return html`
${repeat(movements, movement=>movement.id, (movement, index)=>html`
<movement>
<dt slot="id"> ${movement.id} </dt>
<dl slot="description"> ${movement.description} </dl>
<dl slot="amount"> ${movement.amount} </dl>
<dl slot="balance"> ${movement.balance} </dl>
</movement>
`)}
`;
}
Which it is the best way? When do I have to use one and the other?
javascript polymer web-component lit-element lit-html
add a comment |
I've a question about what it is the best way to pass some value from a father component to a child component and show the value, because I've tried to pass value with properties and slot and both ways work.
Properties: I've a movement list and use repeat
from lit-html (and method html
to render) in the father component in order to create n child component giving the values in them properties.
//father component
render(){
return html`
${repeat(movements, movement => movement.id, (movement, index)=> html`
<movement
.id=${movement.id} .description=${movement.description} .amount=${movement.amount} .balance=${movement.balance}>
</movement>
<hr>
`)}
`
}
//child component
render(){
return html`
<dt>${this.id}</dt>
<dl>${this.description}</dl>
<dl>${this.amount}</dl>
<dl>${this.balance}</dl>
`;
}
Slot: I've a movement list and use repeat
from lit-html (and method html
to render) in the father component in order to create n child component giving the values in slot which were declared in the child component
//child component
render(){
return html`
<dd>
<slot name="id"></slot>
<slot name="description"></slot>
<slot name="amount"></slot>
<slot name="balance"></slot>
</dd>
`;
}
//father component
render(){
return html`
${repeat(movements, movement=>movement.id, (movement, index)=>html`
<movement>
<dt slot="id"> ${movement.id} </dt>
<dl slot="description"> ${movement.description} </dl>
<dl slot="amount"> ${movement.amount} </dl>
<dl slot="balance"> ${movement.balance} </dl>
</movement>
`)}
`;
}
Which it is the best way? When do I have to use one and the other?
javascript polymer web-component lit-element lit-html
Why use lit-html in the first place? React easily supports templates and repetition. So the answer is: neither, which will also get rid of this, sorry, really ugly syntax.
– Chris G
Nov 15 '18 at 10:50
Plus, I think you're using those tags wrong;dl
is the outermost one, containing a list ofdt
,dd
pairs: developer.mozilla.org/en-US/docs/Web/HTML/Element/dl
– Chris G
Nov 15 '18 at 10:59
Yes, the internal tag are wrong but for the example it isn't important. I don't use React, I use Lit-Element
– Ismael Rodriguez
Nov 15 '18 at 11:45
Oh, sorry, please ignore me :) I sawrender()
and "component" and my went automatically went to React :)
– Chris G
Nov 15 '18 at 11:55
add a comment |
I've a question about what it is the best way to pass some value from a father component to a child component and show the value, because I've tried to pass value with properties and slot and both ways work.
Properties: I've a movement list and use repeat
from lit-html (and method html
to render) in the father component in order to create n child component giving the values in them properties.
//father component
render(){
return html`
${repeat(movements, movement => movement.id, (movement, index)=> html`
<movement
.id=${movement.id} .description=${movement.description} .amount=${movement.amount} .balance=${movement.balance}>
</movement>
<hr>
`)}
`
}
//child component
render(){
return html`
<dt>${this.id}</dt>
<dl>${this.description}</dl>
<dl>${this.amount}</dl>
<dl>${this.balance}</dl>
`;
}
Slot: I've a movement list and use repeat
from lit-html (and method html
to render) in the father component in order to create n child component giving the values in slot which were declared in the child component
//child component
render(){
return html`
<dd>
<slot name="id"></slot>
<slot name="description"></slot>
<slot name="amount"></slot>
<slot name="balance"></slot>
</dd>
`;
}
//father component
render(){
return html`
${repeat(movements, movement=>movement.id, (movement, index)=>html`
<movement>
<dt slot="id"> ${movement.id} </dt>
<dl slot="description"> ${movement.description} </dl>
<dl slot="amount"> ${movement.amount} </dl>
<dl slot="balance"> ${movement.balance} </dl>
</movement>
`)}
`;
}
Which it is the best way? When do I have to use one and the other?
javascript polymer web-component lit-element lit-html
I've a question about what it is the best way to pass some value from a father component to a child component and show the value, because I've tried to pass value with properties and slot and both ways work.
Properties: I've a movement list and use repeat
from lit-html (and method html
to render) in the father component in order to create n child component giving the values in them properties.
//father component
render(){
return html`
${repeat(movements, movement => movement.id, (movement, index)=> html`
<movement
.id=${movement.id} .description=${movement.description} .amount=${movement.amount} .balance=${movement.balance}>
</movement>
<hr>
`)}
`
}
//child component
render(){
return html`
<dt>${this.id}</dt>
<dl>${this.description}</dl>
<dl>${this.amount}</dl>
<dl>${this.balance}</dl>
`;
}
Slot: I've a movement list and use repeat
from lit-html (and method html
to render) in the father component in order to create n child component giving the values in slot which were declared in the child component
//child component
render(){
return html`
<dd>
<slot name="id"></slot>
<slot name="description"></slot>
<slot name="amount"></slot>
<slot name="balance"></slot>
</dd>
`;
}
//father component
render(){
return html`
${repeat(movements, movement=>movement.id, (movement, index)=>html`
<movement>
<dt slot="id"> ${movement.id} </dt>
<dl slot="description"> ${movement.description} </dl>
<dl slot="amount"> ${movement.amount} </dl>
<dl slot="balance"> ${movement.balance} </dl>
</movement>
`)}
`;
}
Which it is the best way? When do I have to use one and the other?
javascript polymer web-component lit-element lit-html
javascript polymer web-component lit-element lit-html
asked Nov 15 '18 at 10:47
Ismael RodriguezIsmael Rodriguez
92
92
Why use lit-html in the first place? React easily supports templates and repetition. So the answer is: neither, which will also get rid of this, sorry, really ugly syntax.
– Chris G
Nov 15 '18 at 10:50
Plus, I think you're using those tags wrong;dl
is the outermost one, containing a list ofdt
,dd
pairs: developer.mozilla.org/en-US/docs/Web/HTML/Element/dl
– Chris G
Nov 15 '18 at 10:59
Yes, the internal tag are wrong but for the example it isn't important. I don't use React, I use Lit-Element
– Ismael Rodriguez
Nov 15 '18 at 11:45
Oh, sorry, please ignore me :) I sawrender()
and "component" and my went automatically went to React :)
– Chris G
Nov 15 '18 at 11:55
add a comment |
Why use lit-html in the first place? React easily supports templates and repetition. So the answer is: neither, which will also get rid of this, sorry, really ugly syntax.
– Chris G
Nov 15 '18 at 10:50
Plus, I think you're using those tags wrong;dl
is the outermost one, containing a list ofdt
,dd
pairs: developer.mozilla.org/en-US/docs/Web/HTML/Element/dl
– Chris G
Nov 15 '18 at 10:59
Yes, the internal tag are wrong but for the example it isn't important. I don't use React, I use Lit-Element
– Ismael Rodriguez
Nov 15 '18 at 11:45
Oh, sorry, please ignore me :) I sawrender()
and "component" and my went automatically went to React :)
– Chris G
Nov 15 '18 at 11:55
Why use lit-html in the first place? React easily supports templates and repetition. So the answer is: neither, which will also get rid of this, sorry, really ugly syntax.
– Chris G
Nov 15 '18 at 10:50
Why use lit-html in the first place? React easily supports templates and repetition. So the answer is: neither, which will also get rid of this, sorry, really ugly syntax.
– Chris G
Nov 15 '18 at 10:50
Plus, I think you're using those tags wrong;
dl
is the outermost one, containing a list of dt
,dd
pairs: developer.mozilla.org/en-US/docs/Web/HTML/Element/dl– Chris G
Nov 15 '18 at 10:59
Plus, I think you're using those tags wrong;
dl
is the outermost one, containing a list of dt
,dd
pairs: developer.mozilla.org/en-US/docs/Web/HTML/Element/dl– Chris G
Nov 15 '18 at 10:59
Yes, the internal tag are wrong but for the example it isn't important. I don't use React, I use Lit-Element
– Ismael Rodriguez
Nov 15 '18 at 11:45
Yes, the internal tag are wrong but for the example it isn't important. I don't use React, I use Lit-Element
– Ismael Rodriguez
Nov 15 '18 at 11:45
Oh, sorry, please ignore me :) I saw
render()
and "component" and my went automatically went to React :)– Chris G
Nov 15 '18 at 11:55
Oh, sorry, please ignore me :) I saw
render()
and "component" and my went automatically went to React :)– Chris G
Nov 15 '18 at 11:55
add a comment |
2 Answers
2
active
oldest
votes
Here is an example to pass of object's properties
with using LitElement
:
DEMO
import { LitElement, html } from '@polymer/lit-element';
class MyElement extends LitElement {
static get properties() { return {
movements: {
type:Object
}
}
}
constructor(){
super();
// Initialize property here.
this.movements = [{id:"123", amount:40000, description:"Bu yuzyilin en buyuk lideri Atatürk tür", balance:20000},{id:"123", amount:40000, description:"Tosun was here ! :) ", balance:20000},{id:"123", amount:40000, description:"Ne Mutlu Diyene, Buraarda ırkçı olmayahh :)) ", balance:20000}];
}
//father component
render(){
return html`
${this.movements.map(movement => html`<movement-list .id=${movement.id} .description=${movement.description} .amount=${movement.amount} .balance=${movement.balance}></movement-list>`)}
`;
}
}
class MovementList extends LitElement {
static get properties() { return {
id: {type:String},
description: {type:String},
amount: {type:Number},
balance: {type:Number}
}
}
//child component
render(){
return html`
<dt>${this.id}</dt>
<dl>${this.description}</dl>
<dl>${this.amount}</dl>
<dl>${this.balance}</dl>
`;
}
}
customElements.define('my-element', MyElement);
customElements.define('movement-list', MovementList);
add a comment |
If you want pass any property, value or similar you must to use a Polymer property if the way is from parent to child (with a dispatch event if it is from child to parent).
The use of a <slot>
is when you have created a space where other dev wants add more content.
Polymer's guide says:
To allow children to render, you can add a element to your shadow tree. Think of the as a placeholder showing where child nodes will render.
So, if you want to pass a value from parent to child I would use a property.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53317709%2fuse-properties-or-slot-for-pass-data-to-child-element%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
Here is an example to pass of object's properties
with using LitElement
:
DEMO
import { LitElement, html } from '@polymer/lit-element';
class MyElement extends LitElement {
static get properties() { return {
movements: {
type:Object
}
}
}
constructor(){
super();
// Initialize property here.
this.movements = [{id:"123", amount:40000, description:"Bu yuzyilin en buyuk lideri Atatürk tür", balance:20000},{id:"123", amount:40000, description:"Tosun was here ! :) ", balance:20000},{id:"123", amount:40000, description:"Ne Mutlu Diyene, Buraarda ırkçı olmayahh :)) ", balance:20000}];
}
//father component
render(){
return html`
${this.movements.map(movement => html`<movement-list .id=${movement.id} .description=${movement.description} .amount=${movement.amount} .balance=${movement.balance}></movement-list>`)}
`;
}
}
class MovementList extends LitElement {
static get properties() { return {
id: {type:String},
description: {type:String},
amount: {type:Number},
balance: {type:Number}
}
}
//child component
render(){
return html`
<dt>${this.id}</dt>
<dl>${this.description}</dl>
<dl>${this.amount}</dl>
<dl>${this.balance}</dl>
`;
}
}
customElements.define('my-element', MyElement);
customElements.define('movement-list', MovementList);
add a comment |
Here is an example to pass of object's properties
with using LitElement
:
DEMO
import { LitElement, html } from '@polymer/lit-element';
class MyElement extends LitElement {
static get properties() { return {
movements: {
type:Object
}
}
}
constructor(){
super();
// Initialize property here.
this.movements = [{id:"123", amount:40000, description:"Bu yuzyilin en buyuk lideri Atatürk tür", balance:20000},{id:"123", amount:40000, description:"Tosun was here ! :) ", balance:20000},{id:"123", amount:40000, description:"Ne Mutlu Diyene, Buraarda ırkçı olmayahh :)) ", balance:20000}];
}
//father component
render(){
return html`
${this.movements.map(movement => html`<movement-list .id=${movement.id} .description=${movement.description} .amount=${movement.amount} .balance=${movement.balance}></movement-list>`)}
`;
}
}
class MovementList extends LitElement {
static get properties() { return {
id: {type:String},
description: {type:String},
amount: {type:Number},
balance: {type:Number}
}
}
//child component
render(){
return html`
<dt>${this.id}</dt>
<dl>${this.description}</dl>
<dl>${this.amount}</dl>
<dl>${this.balance}</dl>
`;
}
}
customElements.define('my-element', MyElement);
customElements.define('movement-list', MovementList);
add a comment |
Here is an example to pass of object's properties
with using LitElement
:
DEMO
import { LitElement, html } from '@polymer/lit-element';
class MyElement extends LitElement {
static get properties() { return {
movements: {
type:Object
}
}
}
constructor(){
super();
// Initialize property here.
this.movements = [{id:"123", amount:40000, description:"Bu yuzyilin en buyuk lideri Atatürk tür", balance:20000},{id:"123", amount:40000, description:"Tosun was here ! :) ", balance:20000},{id:"123", amount:40000, description:"Ne Mutlu Diyene, Buraarda ırkçı olmayahh :)) ", balance:20000}];
}
//father component
render(){
return html`
${this.movements.map(movement => html`<movement-list .id=${movement.id} .description=${movement.description} .amount=${movement.amount} .balance=${movement.balance}></movement-list>`)}
`;
}
}
class MovementList extends LitElement {
static get properties() { return {
id: {type:String},
description: {type:String},
amount: {type:Number},
balance: {type:Number}
}
}
//child component
render(){
return html`
<dt>${this.id}</dt>
<dl>${this.description}</dl>
<dl>${this.amount}</dl>
<dl>${this.balance}</dl>
`;
}
}
customElements.define('my-element', MyElement);
customElements.define('movement-list', MovementList);
Here is an example to pass of object's properties
with using LitElement
:
DEMO
import { LitElement, html } from '@polymer/lit-element';
class MyElement extends LitElement {
static get properties() { return {
movements: {
type:Object
}
}
}
constructor(){
super();
// Initialize property here.
this.movements = [{id:"123", amount:40000, description:"Bu yuzyilin en buyuk lideri Atatürk tür", balance:20000},{id:"123", amount:40000, description:"Tosun was here ! :) ", balance:20000},{id:"123", amount:40000, description:"Ne Mutlu Diyene, Buraarda ırkçı olmayahh :)) ", balance:20000}];
}
//father component
render(){
return html`
${this.movements.map(movement => html`<movement-list .id=${movement.id} .description=${movement.description} .amount=${movement.amount} .balance=${movement.balance}></movement-list>`)}
`;
}
}
class MovementList extends LitElement {
static get properties() { return {
id: {type:String},
description: {type:String},
amount: {type:Number},
balance: {type:Number}
}
}
//child component
render(){
return html`
<dt>${this.id}</dt>
<dl>${this.description}</dl>
<dl>${this.amount}</dl>
<dl>${this.balance}</dl>
`;
}
}
customElements.define('my-element', MyElement);
customElements.define('movement-list', MovementList);
edited Nov 15 '18 at 17:47
answered Nov 15 '18 at 17:42
HakanCHakanC
2,1843813
2,1843813
add a comment |
add a comment |
If you want pass any property, value or similar you must to use a Polymer property if the way is from parent to child (with a dispatch event if it is from child to parent).
The use of a <slot>
is when you have created a space where other dev wants add more content.
Polymer's guide says:
To allow children to render, you can add a element to your shadow tree. Think of the as a placeholder showing where child nodes will render.
So, if you want to pass a value from parent to child I would use a property.
add a comment |
If you want pass any property, value or similar you must to use a Polymer property if the way is from parent to child (with a dispatch event if it is from child to parent).
The use of a <slot>
is when you have created a space where other dev wants add more content.
Polymer's guide says:
To allow children to render, you can add a element to your shadow tree. Think of the as a placeholder showing where child nodes will render.
So, if you want to pass a value from parent to child I would use a property.
add a comment |
If you want pass any property, value or similar you must to use a Polymer property if the way is from parent to child (with a dispatch event if it is from child to parent).
The use of a <slot>
is when you have created a space where other dev wants add more content.
Polymer's guide says:
To allow children to render, you can add a element to your shadow tree. Think of the as a placeholder showing where child nodes will render.
So, if you want to pass a value from parent to child I would use a property.
If you want pass any property, value or similar you must to use a Polymer property if the way is from parent to child (with a dispatch event if it is from child to parent).
The use of a <slot>
is when you have created a space where other dev wants add more content.
Polymer's guide says:
To allow children to render, you can add a element to your shadow tree. Think of the as a placeholder showing where child nodes will render.
So, if you want to pass a value from parent to child I would use a property.
answered Dec 11 '18 at 18:42
AlvaroGlezAlvaroGlez
38112
38112
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53317709%2fuse-properties-or-slot-for-pass-data-to-child-element%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Why use lit-html in the first place? React easily supports templates and repetition. So the answer is: neither, which will also get rid of this, sorry, really ugly syntax.
– Chris G
Nov 15 '18 at 10:50
Plus, I think you're using those tags wrong;
dl
is the outermost one, containing a list ofdt
,dd
pairs: developer.mozilla.org/en-US/docs/Web/HTML/Element/dl– Chris G
Nov 15 '18 at 10:59
Yes, the internal tag are wrong but for the example it isn't important. I don't use React, I use Lit-Element
– Ismael Rodriguez
Nov 15 '18 at 11:45
Oh, sorry, please ignore me :) I saw
render()
and "component" and my went automatically went to React :)– Chris G
Nov 15 '18 at 11:55