如何将数组绑定到 Polymer 2 中的组件模板?
How to bind an array to the component template in Polymer 2?
我正在尝试将数组直接绑定到 Polymer 2 组件模板。它起初有效,但随后检测不到变化。我正在使用 this.push
方法以允许 Polymer 检测更改,但它不起作用。绑定到 dom-repeat
模板就可以了。
在这里你可以找到一个 Plunker:http://plnkr.co/edit/MWO7i7m3GB5b7Eqri1yX?p=preview
是否可以做我正在尝试的事情?我做错了什么?
感谢您的帮助
不,不可能像这样绑定到数组。
[[json(data)]]
如果data是数组,就不行了。
观察者也一样:
static get observers(){
return [
'_dataChanged(data)'
]
}
这行不通。
在直接绑定中,唯一的工作方式是将整个数组值更改为另一个值。
class ParentElement extends Polymer.Element {
static get is() { return "parent-element"; }
static get properties(){
return {
data: {
type: Array,
notify: true,
value: function(){
return [{name: 'first'}]
}
}
}
}
constructor() {
super();
}
json(data){
return JSON.stringify(data);
}
addChild(){
this.data = [{name: 'first'},{name: 'second'}];
}
}
customElements.define(ParentElement.is, ParentElement);
在上面的这种情况下,您可以看到 data
数组已被完全替换并且它将起作用,因为它是 data
对象发生了变化。
在您的情况下,您更改了数组的内容,那么绑定将不起作用。
如果你想看到一些东西,你可以在 plunker 中更改 HTML 部分:
[[json(data.*)]]
然后您将看到发生变化的聚合物绑定对象。
但是最好不要像你那样绑定数组,最好是使用观察者并在函数中执行我们的操作:
static get observers(){
return [
'_dataChanged(data.splices)'
]
}
_dataChanged(value){
//work to do here
}
有关更多详细信息,您可以查看聚合物文档 here
我正在尝试将数组直接绑定到 Polymer 2 组件模板。它起初有效,但随后检测不到变化。我正在使用 this.push
方法以允许 Polymer 检测更改,但它不起作用。绑定到 dom-repeat
模板就可以了。
在这里你可以找到一个 Plunker:http://plnkr.co/edit/MWO7i7m3GB5b7Eqri1yX?p=preview
是否可以做我正在尝试的事情?我做错了什么?
感谢您的帮助
不,不可能像这样绑定到数组。
[[json(data)]]
如果data是数组,就不行了。
观察者也一样:
static get observers(){
return [
'_dataChanged(data)'
]
}
这行不通。
在直接绑定中,唯一的工作方式是将整个数组值更改为另一个值。
class ParentElement extends Polymer.Element {
static get is() { return "parent-element"; }
static get properties(){
return {
data: {
type: Array,
notify: true,
value: function(){
return [{name: 'first'}]
}
}
}
}
constructor() {
super();
}
json(data){
return JSON.stringify(data);
}
addChild(){
this.data = [{name: 'first'},{name: 'second'}];
}
}
customElements.define(ParentElement.is, ParentElement);
在上面的这种情况下,您可以看到 data
数组已被完全替换并且它将起作用,因为它是 data
对象发生了变化。
在您的情况下,您更改了数组的内容,那么绑定将不起作用。
如果你想看到一些东西,你可以在 plunker 中更改 HTML 部分:
[[json(data.*)]]
然后您将看到发生变化的聚合物绑定对象。 但是最好不要像你那样绑定数组,最好是使用观察者并在函数中执行我们的操作:
static get observers(){
return [
'_dataChanged(data.splices)'
]
}
_dataChanged(value){
//work to do here
}
有关更多详细信息,您可以查看聚合物文档 here