聚合物:将属性传递给子元素不起作用
Polymer: Passing properties to child element doesn't work
我正在尝试从 <data-component>
中的自定义 Polymer 组件 <iron-list>
输出数据,但是当我打开页面时没有显示任何内容。当我将对象数组直接传递给 <iron-list items='[{"name": "test1"}, {"name":"test2"}]' >
之类的铁列表时,它会起作用
我做错了什么,<template is="dom-bind" id="t">
是强制性的吗?
index.html
<html>
<head>
<script src="../../webcomponentsjs/webcomponents-lite.js"></script>
<link rel="import" href="../data-component.html">
<link rel="import" href="../../iron-list/iron-list.html">
</head>
<body unresolved>
<template is="dom-bind" id="t">
<data-component>
<!--<iron-list items='[{"name": "test1"}, {"name":"test2"}]' > WORKS -->
<iron-list items="{{data}}" >
<template>
<div>
Name: <span>{{item.name}}</span>
</div>
</template>
</iron-list>
</data-component>
</template>
</body>
</html>
数据-component.html
<link rel="import" href="../polymer/polymer.html">
<dom-module id="data-component">
<template>
<content></content>
</template>
</dom-module>
<script>
window.coolData = [
{"name": "Bob"},
{"name": "Tim"},
{"name": "Mike"}
];
Polymer({
is: 'data-component',
properties: {
data: {
value: window.coolData
}
}
});
</script>
您还必须向 data-component
添加数据绑定。否则,系统不知道 data
(在您的 iron-list
中)应该引用您自定义元素中的 data
属性。
<data-component data="{{data}}">
<iron-list items="{{data}}" >
...
</iron-list>
</data-component>
如果你想在 Polymer 元素之外进行数据绑定,dom-bind
是必需的,这里似乎就是这种情况。
您还应确保 data
属性 配置为通知更改,并且其类型设置为 Array
。
Polymer({
is: 'data-component',
properties: {
data: {
type: Array,
value: window.coolData,
notify: true
}
}
});
我将针对我已经发布的内容提出替代答案。如果您希望 data-component
始终包含 iron-list
,那么您可以在此处使用此版本。但是,如果 data-component
的内容应该更灵活,请使用我的其他答案。
如果您将 iron-list
移到 data-component
中,您可以删除 index.html 中的 dom-bind
。
数据-component.html
<link rel="import" href="../polymer/polymer.html">
<dom-module id="data-component">
<template>
<iron-list items="{{data}}" >
<template>
<div>
Name: <span>{{item.name}}</span>
</div>
</template>
</iron-list>
</template>
</dom-module>
<script>
window.coolData = [
{"name": "Bob"},
{"name": "Tim"},
{"name": "Mike"}
];
Polymer({
is: 'data-component',
properties: {
data: {
type: Array,
value: window.coolData
}
}
});
</script>
index.html
<body unresolved>
<data-component></data-component>
</body>
我正在尝试从 <data-component>
中的自定义 Polymer 组件 <iron-list>
输出数据,但是当我打开页面时没有显示任何内容。当我将对象数组直接传递给 <iron-list items='[{"name": "test1"}, {"name":"test2"}]' >
我做错了什么,<template is="dom-bind" id="t">
是强制性的吗?
index.html
<html>
<head>
<script src="../../webcomponentsjs/webcomponents-lite.js"></script>
<link rel="import" href="../data-component.html">
<link rel="import" href="../../iron-list/iron-list.html">
</head>
<body unresolved>
<template is="dom-bind" id="t">
<data-component>
<!--<iron-list items='[{"name": "test1"}, {"name":"test2"}]' > WORKS -->
<iron-list items="{{data}}" >
<template>
<div>
Name: <span>{{item.name}}</span>
</div>
</template>
</iron-list>
</data-component>
</template>
</body>
</html>
数据-component.html
<link rel="import" href="../polymer/polymer.html">
<dom-module id="data-component">
<template>
<content></content>
</template>
</dom-module>
<script>
window.coolData = [
{"name": "Bob"},
{"name": "Tim"},
{"name": "Mike"}
];
Polymer({
is: 'data-component',
properties: {
data: {
value: window.coolData
}
}
});
</script>
您还必须向 data-component
添加数据绑定。否则,系统不知道 data
(在您的 iron-list
中)应该引用您自定义元素中的 data
属性。
<data-component data="{{data}}">
<iron-list items="{{data}}" >
...
</iron-list>
</data-component>
如果你想在 Polymer 元素之外进行数据绑定,dom-bind
是必需的,这里似乎就是这种情况。
您还应确保 data
属性 配置为通知更改,并且其类型设置为 Array
。
Polymer({
is: 'data-component',
properties: {
data: {
type: Array,
value: window.coolData,
notify: true
}
}
});
我将针对我已经发布的内容提出替代答案。如果您希望 data-component
始终包含 iron-list
,那么您可以在此处使用此版本。但是,如果 data-component
的内容应该更灵活,请使用我的其他答案。
如果您将 iron-list
移到 data-component
中,您可以删除 index.html 中的 dom-bind
。
数据-component.html
<link rel="import" href="../polymer/polymer.html">
<dom-module id="data-component">
<template>
<iron-list items="{{data}}" >
<template>
<div>
Name: <span>{{item.name}}</span>
</div>
</template>
</iron-list>
</template>
</dom-module>
<script>
window.coolData = [
{"name": "Bob"},
{"name": "Tim"},
{"name": "Mike"}
];
Polymer({
is: 'data-component',
properties: {
data: {
type: Array,
value: window.coolData
}
}
});
</script>
index.html
<body unresolved>
<data-component></data-component>
</body>