如何解决为什么我的 handleChange 方法没有在 lwc 中调用
我是 lwc 的新手,并在通过单击帐户记录检查复选框时尝试调用 handleChange 方法 在下面的链接中,有两个组件显示的帐户和联系人记录列表,在右栏中有一个带有帐户名称的所有联系人的列表,因此当我单击右栏中的帐户名称时,会得到相同的帐户名称在左侧检查,只有它的相关联系人应该显示在所有联系人的列表中,我尝试通过这样的 pubsub 事件来实现它
https://i.stack.imgur.com/zx2Fc.png
import { LightningElement,api,wire,track } from 'lwc';
import pubsub from 'c/pubsubjs' ;
export default class MyPublisher extends LightningElement {
@track data;
@track error;
@track accountId;
@api accrecords = [];
connectedCallback(){
this.regiser();
}
regiser(){
pubsub.register('accEventdetails',this.accDetails.bind(this));
}
accDetails(accountId){
this.accountId = accountId; // getting Id sent from 2nd component
console.log("inParent= "+this.accountId);
var parentId = this.accountId;
console.log('parentId= '+parentId);
this.template.querySelector(`[data-dev-id="${this.accountId}"]`).checked=true;
this.handleChange();
}
/*renderedCallback(){
handleChange(); // also tried to call it in renderedCallback bt didn work.
}*/
handleChange(event) {
if(event.target.checked){
var accId = event.currentTarget.getAttribute('data-dev-id');
// console.log("accId="+accId);
this.accrecords.push(accId);
}else{
var accId = event.currentTarget.getAttribute('data-dev-id');
this.accrecords = this.accrecords.filter(value =>value!==accId)
}
console.log("accrecords="+JSON.stringify(this.accrecords));
pubsub.fire('eventdetails',this.accrecords);
}
通过这种触发方法,我可以在单击复选框时在联系人列表中显示与帐户相关的联系人,这可以实现
<template for:each={data} for:item="a">
<div key={a.Id}>
<div class="slds-grid">
<div class="slds-has-error chckbx">
<lightning-input type="checkBox" onchange={handleChange} data-dev-id={a.Id}>
</lightning-input>
</div>
<div class="slds-col ">
<h1>{a.Name}</h1>
</div>
</div>
</div>
</template>
这是我触发事件的第二个组件代码
import { LightningElement,track,wire } from 'lwc';
import pubsub from 'c/pubsubjs' ;
export default class ShowConRecords extends LightningElement {
@track data ;
@track error;
@track accountId = [];
@api accrecordId = [];
connectedCallback(){
this.regiser();
}
regiser(){
window.console.log('event registered ');
pubsub.register('eventdetails',this.conDetails.bind(this));
}
conDetails(accountId){
this.accountId = JSON.stringify(accountId);
console.log("inchild "+JSON.stringify(this.accountId));
}
handleChange(event){
var accId = event.currentTarget.getAttribute('data-dev-id');
console.log('accId= '+accId);
pubsub.fire('accEventdetails',accId);
}
<template for:each={data} for:item="con" >
<div key={con.Id} >
<div class="slds-border_bottom recrd">
<div class="Name ">
{con.conName}
</div>
<h1 class="account">
Account :
<a class="accName" data-dev-id={con.accId} onclick={handleChange}>
{con.accName}
</a>
</h1>
</div>
</div>
</template>
所以任何人都可以帮助我。 提前致谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。