加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Angular Service Observable第二次不会触发组件订阅

发布时间:2020-12-17 17:55:14 所属栏目:安全 来源:网络整理
导读:我正在尝试订阅服务主题的组件,以确保组件订阅在服务发射上运行. 问题是订阅命中率仅在第一次订阅后也没有达到第二次附加的可观察返回0订阅. 以下是代码: export class StoreService { private storesList : SubjectArrayKeyValuestring = null; constructo
我正在尝试订阅服务主题的组件,以确保组件订阅在服务发射上运行.

问题是订阅命中率仅在第一次订阅后也没有达到第二次附加的可观察返回0订阅.

以下是代码:

export class StoreService {
    private storesList : Subject<Array<KeyValue<string>>> = null;

    constructor(private http: Http,private _uService: UserService) {
        this.storesList = new Subject<Array<KeyValue<string>>>();
     }
    loadStores(): void{
        this.getAllStores().subscribe(m=>{
            debugger;
            this.storesList.next(m);
        });
    }
    storeListEvent(): Observable<Array<KeyValue<string>>>{
    return this.storesList.asObservable();
    } 
}

虽然组件是.

export class HeaderNavComponent implements OnInit,AfterViewInit,OnDestroy  {

    private storeUpdateSubscription = null;    
    constructor(private _userService: UserService,private cdRef: ChangeDetectorRef,private _storeService: StoreService,private router: Router,private location: Location) {

        this.storeUpdateSubscription = this._storeService.storeListEvent().subscribe(stores => {
            debugger;
            this.appStore = stores;
            this.verifySuperAdmin();
        });
    }

目的是每次都在组件中调用上面的订阅

调用Store Service – loadStores时

解决方法

您正在应用反模式:永远不会在同一服务中订阅服务调用.您必须返回调用,组件必须订阅此Observable.

无论如何,由于storeList是一个主题,你可以简化这样做:

this.getAllStores().subscribe(this.storesList);

因为一个主体也是一个观察者

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读