使用Polymer 2.0的简单web组件:从下拉列表更新值不起作用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Polymer 2.0的简单web组件:从下拉列表更新值不起作用相关的知识,希望对你有一定的参考价值。
我尝试使用Polymer 2.0实现一个非常基本的Web组件,用于学习目的。该组件应仅在select-element
中显示h1-element
的选定值。
<link rel="import" href="../bower_components/polymer/polymer-element.html">
<dom-module id="test-basis">
<template>
<style>
</style>
<container class="content__column">
<h2>Test component</h2>
<div class="table-select-line mono">
<label class="form-field-label" for="test-key">Tabelle:
<select class="form-field dropdown" id="tables">
<option value="printer">My printer</option>
<option value="color">My color</option>
</select>
</label>
</div>
<h1 id="abc">[[currentTable]]</h1>
</container>
</template>
<script>
/**
* @customElement
* @polymer
*/
class TestBasisData extends Polymer.Element {
constructor() {
super();
}
ready() {
super.ready();
}
static get is() {
return 'test-component';
}
connectedCallback() {
super.connectedCallback();
console.log("BasisData created...");
//create shadow dom
var shadow = this.shadowRoot;
this._createTablesListener();
this._loadData();
this.currentTable = 'printer';
}
static get properties() {
return {
data: Object,
selectedTable: {
type: String,
notify: true
},
currentTable:{
type: String,
notify: true
}
}
}
static get observers() {
return [
'_handleTableUpdate(currentTable)'
];
}
_createTablesListener(){
let tables = this.shadowRoot.querySelector("#tables");
tables.addEventListener("change", this._handleTableSelect);
}
_handleTableSelect(item) {
console.log("item: " + item.target.value);
this.currentTable = item.target.value;
}
_loadData(table = "printer") {
let p = new Promise((resolve, reject) => {
resolve(this._loadDataFromService());
});
p.then(json => {
this.data = json;
}).catch(e => console.log("Cannot load data from service.", e));
}
async _loadDataFromService() {
let p = await fetch("../data.json");
return await p.json();
}
}
window.customElements.define(TestComponent.is, BasTestisData);
</script>
</dom-module>
我能够在_handleTableSelect
监听器中获取所选值,但是从那里:我不知道如何更新currentTable
字段。
我不能使用this.querySelector("#abc")
,因为在_handleTableSelect
方法中:this
仅指select
元素。我也试过观察者,但他们从未被召唤过。
所以我在某种程度上坚持如何将这些目标联系在一起。
PS:我试过工作,例如通过聚合物铁页,了解如何做到这一点,但这更令人困惑;因为他们使用例如this.items
在整个代码中无处创建,分配或定义。但这可能是另一个问题。
答案
尝试把value =“{{currentTable :: input}}”
恩。
<select class="form-field dropdown" id="tables"
value="{{currentTable::input}}">
以上是关于使用Polymer 2.0的简单web组件:从下拉列表更新值不起作用的主要内容,如果未能解决你的问题,请参考以下文章