在 Polymer 2.x 中使用 <iron-selector>
Using <iron-selector> in Polymer 2.x
我正在尝试演示 <iron-selector>
。在演示中,我想在用户从列表中选择一个新值时登录到控制台。我做错了什么?
http://jsbin.com/ciceguqore/1/edit?html,console,output
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
<base href="//polygit.org/polymer+:master/components/">
<script src="webcomponentsjs/webcomponents-lite.js"></script>
<link rel="import" href="polymer/polymer-element.html">
<link rel="import" href="iron-selector/iron-selector.html">
</head>
<body>
<dom-module id="my-el">
<template>
<iron-selector selected="[[route]]">
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</iron-selector>
</template>
<script>
class MyEl extends Polymer.Element {
static get is() { return 'my-el' }
static get properties() { return {
route: {
type: Number,
notify: true,
observer: '_routeChanged',
},
}}
constructor() {
super();
}
_routeChanged(route) {
console.log('route', route);
}
}
customElements.define(MyEl.is, MyEl);
</script>
</dom-module>
<my-el></my-el>
</body>
</html>
要更改 route
的值,您必须使用双向绑定。由于 iron-selector
无法更改 route
的值,因此未触发观察者。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
<base href="//polygit.org/polymer+:master/components/">
<script src="webcomponentsjs/webcomponents-lite.js"></script>
<link rel="import" href="polymer/polymer-element.html">
<link rel="import" href="iron-selector/iron-selector.html">
</head>
<body>
<dom-module id="my-el">
<template>
<style>
.iron-selected{color:blue}
</style>
<p>Route value using two way binding in iron-selector: [[route]] </p>
<iron-selector selected="{{route}}">
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</iron-selector>
<p>Route value using one way binding in iron-selector: [[route]]</p>
<iron-selector selected="[[route]]">
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</iron-selector>
[iron-selector is working but it cannot update the value of route]
</template>
<script>
class MyEl extends Polymer.Element {
static get is() {
return 'my-el'
}
static get properties() {
return {
route: {
type: Number,
notify: true,
observer: '_routeChanged',
},
}
}
constructor() {
super();
}
_routeChanged(route) {
console.log('route', route);
}
}
customElements.define(MyEl.is, MyEl);
</script>
</dom-module>
<my-el></my-el>
</body>
</html>
您还可以使用 iron-selector
事件的 selected-changed
,当所选的 属性 发生变化时,该事件会被触发。
示例:
<iron-selector on-selected-changed="_onSelectedChanged" selected="[[route]]">
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</iron-selector>
_onSelectedChanged(e){
console.log('route',e.detail.value);
}
我正在尝试演示 <iron-selector>
。在演示中,我想在用户从列表中选择一个新值时登录到控制台。我做错了什么?
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
<base href="//polygit.org/polymer+:master/components/">
<script src="webcomponentsjs/webcomponents-lite.js"></script>
<link rel="import" href="polymer/polymer-element.html">
<link rel="import" href="iron-selector/iron-selector.html">
</head>
<body>
<dom-module id="my-el">
<template>
<iron-selector selected="[[route]]">
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</iron-selector>
</template>
<script>
class MyEl extends Polymer.Element {
static get is() { return 'my-el' }
static get properties() { return {
route: {
type: Number,
notify: true,
observer: '_routeChanged',
},
}}
constructor() {
super();
}
_routeChanged(route) {
console.log('route', route);
}
}
customElements.define(MyEl.is, MyEl);
</script>
</dom-module>
<my-el></my-el>
</body>
</html>
要更改 route
的值,您必须使用双向绑定。由于 iron-selector
无法更改 route
的值,因此未触发观察者。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
<base href="//polygit.org/polymer+:master/components/">
<script src="webcomponentsjs/webcomponents-lite.js"></script>
<link rel="import" href="polymer/polymer-element.html">
<link rel="import" href="iron-selector/iron-selector.html">
</head>
<body>
<dom-module id="my-el">
<template>
<style>
.iron-selected{color:blue}
</style>
<p>Route value using two way binding in iron-selector: [[route]] </p>
<iron-selector selected="{{route}}">
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</iron-selector>
<p>Route value using one way binding in iron-selector: [[route]]</p>
<iron-selector selected="[[route]]">
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</iron-selector>
[iron-selector is working but it cannot update the value of route]
</template>
<script>
class MyEl extends Polymer.Element {
static get is() {
return 'my-el'
}
static get properties() {
return {
route: {
type: Number,
notify: true,
observer: '_routeChanged',
},
}
}
constructor() {
super();
}
_routeChanged(route) {
console.log('route', route);
}
}
customElements.define(MyEl.is, MyEl);
</script>
</dom-module>
<my-el></my-el>
</body>
</html>
您还可以使用 iron-selector
事件的 selected-changed
,当所选的 属性 发生变化时,该事件会被触发。
示例:
<iron-selector on-selected-changed="_onSelectedChanged" selected="[[route]]">
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</iron-selector>
_onSelectedChanged(e){
console.log('route',e.detail.value);
}