Angular 8 通过 service 从A组件向B组件传值,收不到.

发布于 2022-09-12 04:48:24 字数 1177 浏览 37 评论 0

8由A组件,跳到B组件.

一. A组件点击事件:

import { ListlevelService } from 'src/app/services/listlevel.service';

... ... 
toInfo(id: string) {

const projectChild = this.projectsTop.filter(p => p.parentProjectId = id); 
if(projectChild.length > 0) {
console.log(projectChild) //数组有值
this.listlevelServe.sendMessage(projectChild) //传值
this.router.navigate(['/sheetInfo', id]); 
}
}

二. service 组件:

@Injectable({
providedIn: ServicesModule
})

export class ListlevelService {

private subject = new Subject<any>();
sendMessage(type:any){
console.log('TAG'+'--->'+type)  //能打印
this.subject.next({type});
}

getMessage():Observable<any> {
return this.subject.asObservable();
}
}

三. B组件:

import { ListlevelService } from 'src/app/services/listlevel.service';
... ...

// 接收消息的地方:

ngAfterViewInit():void {
console.log('1111')  //能打印
this.subscription = this.listlevelServe.getMessage().subscribe(
projectChild => {

console.log(projectChild)
this.projectChild = projectChild
console.log('3333')   //不能打印
})
console.log('2222')  //能打印
console.log(this.subscription)
}

问题出在哪里 ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

肥爪爪 2022-09-19 04:48:24

你先要确定A和B组件注入的listlevelServe是否是同一个实例,只有A和B组件的listlevelServe的provider相同,注入的才是同一个实例。

如果A和B分别在自己@Component的providers中声明listlevelServe的Service类,那么肯定不是同一个实例,A发送的消息B肯定收不到。如果在根模块或者A/B组件的共同父组件的模块中的providers中声明listlevelServe的Service类,那么二者就是相同的实例,A/B组件可以通过listlevelServe交换数据。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文