简体   繁体   English

行为主题下一个()不起作用 angular 8

[英]behaviorSubject next() not working angular 8

I have a HeaderComponent which displays the header in which I have a search bar, where a user when inputs something and presses enter I take the user to SearchComponent .我有一个HeaderComponent ,它显示 header ,其中我有一个搜索栏,用户在输入内容并按 Enter 时将用户带到SearchComponent

I want to implement the functionality that when a user is on search page ( SearchComponent ), the searchBar in header should not be visible while it should be visible on all other pages.我想实现这样的功能,当用户在搜索页面( SearchComponent )上时, header 中的 searchBar 应该不可见,而它应该在所有其他页面上可见。

For this, I added variable searchShow in HeaderComponent.ts and by ng-if in HeaderComponent.html , I show/hide the searchBar.为此,我在HeaderComponent.html中添加了变量searchShow并在HeaderComponent.ts中添加了ng-if ,我显示/隐藏了 searchBar。

To change the value of searchShow , I implemented a Header.service.ts .为了改变searchShow的值,我实现了一个Header.service.ts

header.service.ts header.service.ts

import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
@Injectable({
  providedIn: 'root'
})
export class HeaderService {
  showSearch = new BehaviorSubject<boolean>(true);
  public showSearchObservable = this.showSearch.asObservable()
  constructor(){}
}

header.component.ts header.component.ts

import { Component, OnInit } from '@angular/core';
import { HeaderService } from './header.service';
@Component({
  selector: 'app-header',
  templateUrl: './header.component.html',
  styleUrls: ['./header.component.scss']
})
export class HeaderComponent implements OnInit {
  searchShow;
  constructor(
    private headerService: HeaderService
  ) {}

  ngOnInit() {
    this.headerService.showSearchObservable.subscribe(
      value => {
        this.searchShow = value
        console.log(value) ##==> prints true first time when header is initialized but does not prints anything when search component is loaded
      }
    )
  }
}

search.component.ts search.component.ts

import { Component, OnInit } from '@angular/core';
import { HeaderService } from 'src/app/shared/header/header.service.js';
@Component({
  selector: 'app-search',
  templateUrl: './search.component.html',
  styleUrls: ['./search.component.scss']
})
export class SearchComponent implements OnInit {
 constructor(
    private headerService: HeaderService
  ) {}

  ngOnInit() {
    console.log(this.headerService.showSearch.value) ##==> prints true
    this.headerService.showSearch.next(false)
    console.log(this.headerService.showSearch.value) ##==> prints false, but this value is not emitted to header component
}
}

What am I missing?我错过了什么? Please help.请帮忙。 Thanks谢谢

In search.component.ts you reference在 search.component.ts 你参考

import { HeaderService } from 'src/app/shared/header/header.service.js';

Which is causing a second headerService instance.这导致了第二个 headerService 实例。 Taking .js suffix should fix this issue. .js后缀应该可以解决这个问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM