我正在为网站构建基本文件夹系统。我在$ scope.folderNames中定义了一个文件夹名称数组。当我将这个文件夹名称数组传递给我的自定义元素时,它会将stings数组转换为一个字符串。例如。 [“cat”,“mouse”,“dog”]变成'[“cat”,“mouse”,“dog”]''这样当我引用folderNames [0]时,它返回'['而不是“cat”。知道如何防止这种情况发生吗?
玉元素召唤:
folder-menu(id="folder-menu", angupoly="{selected:'$root.height'}", label="Folders", icon="folder", values='{{folderNames}}')
angupoly是一个允许angular使用Node.bind()来监听自定义元素属性更改的库。
自定义元素:
<link rel="import" href="/polymer/polymer.html">
<link rel="import" href="/core-menu/core-menu.html">
<link rel="import" href="/core-menu/core-submenu.html">
<link rel="import" href="/core-item/core-item.html">
<polymer-element name="folder-menu" attributes="label icon values selected">
<template>
<core-menu>
<core-submenu icon="{{icon}}" label="{{label}}" selected="{{selected}}">
<core-item label="hi"></core-item>
<template repeat={{v in values}}>
<core-item label="{{v}}">
</core-item>
</template>
</core-submenu>
</core-menu>
</template>
<script>
Polymer('folder-menu', {
publish: {
selected : {value:0, reflect : true},
values : {value: [], reflect : true}
},
attributeChanged: function(attrName, oldVal, newVal) {
console.log(attrName, 'old: ' + oldVal, 'new: ', newVal);
console.log(typeof(newVal));
}
});
</script>
</polymer-element>
控制台输出:
selected old: null new: 0
string
values old: {{folderNames}} new:
string
values old: new: ["Calls","Flagged","Group1","Group2","Group3"]
string
答案 0 :(得分:0)
值得注意的事情:
reflect: true
区块中values
的{{1}}无法执行任何操作。publish
将始终为您提供字符串值(属性始终为字符串)。您想要的是观察更改观察器中的attributeChanged()
属性更改(例如values
)。这将为您提供预期的对象(如果您已提示类型):此处设置:
valuesChanged()