我无法理解聚合物中的数据绑定是如何工作的。我检查了文档和以前的一些问题,但仍然:
我有一个主机和一个子元素。孩子是一个注册/登录页面,它向 api 发送 ajax 请求并注册新用户或接收用户令牌。用户数据(名称和令牌保存在 storedUser 对象的元素属性中。我需要的是父元素(MyApp)可以看到这个 storedUser 对象。
非常感谢任何有助于理解的帮助。
主持人(简体):
class MyApp extends PolymerElement {
static get template() {
return html`
<div>{{Here needs to be some data from storedUser from child element}}</div>
<register-login name="register-login" some-props={{storedUser}}></register-login>
`;
}
...
static get properties() {
return {
page: {
type: String,
reflectToAttribute: true,
observer: '_pageChanged'
},
routeData: Object,
subroute: Object,
user: {
type: Object,
notify: true
}
};
}
...
}
孩子:
class RegisterLogin extends PolymerElement {
static get template() {
return html`
<div class="card">
<div id="unauthenticated" hidden$="[[storedUser.loggedin]]">
<h1>Log In</h1>
<p>
<strong>Log in</strong> or
<strong>sign up</strong> to access!</p>
<template is="dom-if" if="[[error]]">
<p class="alert-error"><strong>Error:</strong> [[error]]</p>
</template>
<paper-input-container>
<label slot="input">Username</label>
<iron-input slot="input" bind-value="{{formData.username}}">
<input id="username" type="text" value="{{formData.username}}" placeholder="Username">
</iron-input>
</paper-input-container>
<paper-input-container>
<label>Password</label>
<iron-input slot="input" bind-value="{{formData.password}}">
<input id="password" type="password" value="{{formData.password}}" placeholder="Password">
</iron-input>
</paper-input-container>
<div class="wrapper-btns">
<paper-button raised class="primary" on-tap="postLogin">Log In</paper-button>
<paper-button class="link" on-tap="postRegister">Sign Up</paper-button>
</div>
</div>
<div id="authenticated" hidden$="[[!storedUser.loggedin]]">
<h2>Hello, [[storedUser.name]]!</h2>
<p>You are now logged in. You can access <a href="[[rootPath]]secret-content">Secret Content</a>!</p>
</div>
</div>
`;
}
static get properties() {
return {
formData: {
type: Object,
value: {}
},
storedUser: Object,
error: String
}
}
handleUserResponse(event) {
var response = JSON.parse(event.detail.response);
if (response.id_token) {
this.error = '';
this.setProperties(
{
storedUser: {
name: this.formData.username,
id_token: response.id_token,
access_token: response.access_token,
loggedin: true
},
}
)
}
// reset form data
this.formData = {};
}
handleUserError(event) {
this.error = event.detail.request.xhr.response;
}
}