有没有办法在其类型未知时定义属性?
properties: {
value: {
type: Generic
}
}
最好的方法是什么?
我的问题来自于拥有可能是String
或Number
的值。我知道我可以parseInt()
,但我需要检测是否有必要。此外,当一个属性是一个字符串时,该字符串可以是value = '5'
,这有条件地应用parseInt()
乏味。
答案 0 :(得分:1)
您需要定义Object
类型的属性。
properties: {
value: Object
}
考虑到属性的可能值,解析是不可避免的,但可以很简单。例如,您可以使用带有String#replace
的正则表达式从输入中删除所有非数字字符,并将结果转换为Number
:
Number(value.replace(/[^\d]+/g, ''))
HTMLImports.whenReady(() => {
Polymer({
is: 'x-foo',
properties: {
value: Object,
numberValue: {
computed: '_computeValue(value)'
}
},
_computeValue: function(value) {
// If the value is a string, remove all non-numeric
// characters and convert the result to a number.
return typeof value === 'string'
? Number(value.replace(/[^\d]+/g, ''))
: value;
}
});
});

<head>
<base href="https://polygit.org/polymer+1.7.1/components/">
<script src="webcomponentsjs/webcomponents-lite.min.js"></script>
<link rel="import" href="polymer/polymer.html">
</head>
<body>
<x-foo value="100"></x-foo>
<x-foo value="value = '5'"></x-foo>
<x-foo value="foo 2 bar 4 baz 6 qux"></x-foo>
<dom-module id="x-foo">
<template>
<div>[[value]] ==> [[numberValue]]</div>
</template>
</dom-module>
</body>
&#13;