Polymer 2.0 с использованием Shady DOM document.getElementByID()
Я использую Shady DOM в Polymer 2.0 с помощью следующего сценария
<script>window.ShadyDOM = {force:true};</script>
Я создал три пользовательских элемента входа в систему электронной почты, пароль входа и кнопку входа. Когда нажата кнопка "Бумага", я хотел бы получить значения бумажных входов в адрес электронной почты для входа и пароль для входа. Используя Polymer 1.0, я использовал document.getElementById('#emailLogon'). Value, чтобы получить значение из другого пользовательского элемента, но это возвращает ноль в Polymer 2.0 с использованием Shady DOM.
Если то, что я делаю, теперь невозможно, какова альтернатива извлечению значений из внешних пользовательских элементов из другого пользовательского элемента.
<link rel="import" href="../bower_components/polymer/polymer-element.html">
<link rel="import" href="shared-styles.html">
<link rel="import" href="../bower_components/paper-input/paper-input.html">
<dom-module id="logon-email">
<template>
<style include="shared-styles">
:host {
display: block;
padding: 10px;
}
paper-input {
--paper-input-container-input-color: white;
--paper-input-container-label: { color: white; font-size: 12px};
}
.email_label {
font-family: 'Roboto', 'Noto', sans-serif;
font-size: 12px;
color: white;
}
</style>
<div class="email_label">Email</div>
<paper-input label="Please enter your email address" no-label-float></paper-input>
</template>
<script>
class LogonEmail extends Polymer.Element {
static get is() { return 'logon-email'; }
}
window.customElements.define(LogonEmail.is, LogonEmail);
</script>
</dom-module>
<dom-module id="logon-password">
<template>
<style include="shared-styles">
:host {
display: block;
padding: 10px;
}
paper-input {
--paper-input-container-input-color: white;
--paper-input-container-label: { color: white; font-size: 12px; };
}
.password_label {
font-family: 'Roboto', 'Noto', sans-serif;
font-size: 12px;
color: white;
}
</style>
<div class="password_label">Password</div>
<paper-input id="logonPassword" label="Please enter your password" type="password" no-label-float></paper-input>
</template>
<script>
class LogonPassword extends Polymer.Element {
static get is() { return 'logon-password'; }
}
window.customElements.define(LogonPassword.is, LogonPassword);
</script>
</dom-module>
<link rel="import" href="../bower_components/polymer/polymer-element.html">
<link rel="import" href="shared-styles.html">
<link rel="import" href="../bower_components/paper-button/paper-button.html">
<link rel="import" href="../bower_components/paper-styles/color.html">
<dom-module id="logon-button">
<template>
<style include="shared-styles">
:host {
display: block;
padding: 10px;
}
paper-button {
font-family: 'Roboto', 'Noto', sans-serif;
font-weight: normal;
font-size: 14px;
-webkit-font-smoothing: antialiased;
}
paper-button.green {
background-color: var(--paper-green-500);
color: white;
margin: auto;
width: 100%;
}
</style>
<paper-button on-click="handleLoginClick" raised class="green">Login</paper-button
</template>
<script>
class LogonButton extends Polymer.Element {
static get is() { return 'logon-button'; }
connectedCallback() {
super.connectedCallback();
}
handleLoginClick(){
console.log('Login button clicked');
var loginEmail = document.getElementById('#logonEmail');
console.log('logonEmail ' + loginEmail);
}
}
window.customElements.define(LogonButton.is, LogonButton);
</script>
</dom-module>
1 ответ
Это самый простой подход в полимере для передачи значения между элементами. Так что просто определите свойство и установите его notify:true, чтобы отразить на других элементах следующее:
<paper-input label="Please enter your email address" no-label-float value="{{emailVal}}"></paper-input>
В основном документе передайте свойство emailVal вашим пользовательским элементам, чтобы у вас было свойство во всех 3 элементах, например this.emailVal
<logon-email email-val="{{emailVal}}"></logon-email>
<logon-password email-val="{{emailVal}}"></logon-password>
<logon-button email-val="{{emailVal}}"></logon-button>
И определите это свойство в элементе logon-email и установите его notify:true, чтобы отразить все свойства в любых изменениях. в logon-email
static get properties() { return {
emailVal:{
type:String,
notify:true
},...
и в logon-button
элемент:
handleLoginClick(){
console.log('Login button clicked');
console.log('logonEmail ', this.emailVal);
}
Надеюсь ясно.