【问题标题】:How to implement async pipe using Custom DataType如何使用自定义数据类型实现异步管道
【发布时间】:2018-10-25 16:47:28
【问题描述】:

我是 Angular 的新手,并且一直在开发自己的应用程序以提高我的技能。在此过程中,我遇到了异步管道,但在为自定义类型实现它们时遇到了一些困难。 代码如下:-

header-model.ts

export class HeaderData
{
    flag:boolean=false;
    loggedInName:string='';

    constructor(f,n)
    {
        this.flag=f;
        this.loggedInName=n;
    }
}

header-navigation-service.ts:-

 export class NavigationService
{
private loggedIn=new BehaviorSubject<HeaderData>(new HeaderData(false,''));

get isLoggedIn()
{
    return this.loggedIn.asObservable();
}

 login(val:HeaderData)

{
    if(val.flag==true)
    {
        console.log('In service -> '+val);
        const val1=new HeaderData(val.flag,val.loggedInName);
        this.loggedIn.next(val1);
    }
}
}

我有一个登录组件,它检查 UserCredentials 是否有效并在 header-navigation-service 中设置登录方法(flag=true,loggedInName=username)。

header.component.ts:-

showHeader:HeaderData;
  ngOnInit() {

    this._headerNavigation.isLoggedIn.subscribe((data:HeaderData)=>
  {
this.showHeader=data;

  });


  }

现在我订阅了 isLoggedIn(),但我不想订阅它,因为我没有操作数据,我只想利用 Angular 异步来检索数据并显示在我的视图中。

【问题讨论】:

  • 好吧,做吧,如果某些事情没有按您的预期工作,请发布相关代码,准确说明您期望发生什么以及会发生什么。

标签: angular


【解决方案1】:

您的实现看起来不错。您只需要进行一些更改。

  1. 只需在 header 组件中使用 Obserable 变量
  isLoggedIn$; // Observable variable will be used by async.

  ngOnInit() {
      this.isLoggedIn$ = this._headerNavigation.isLoggedIn;
  }
  1. 在 HTML 中使用 Observable 变量 isLoggedIn$
<span>{{isLoggedIn$ | async}}</span>
  1. 登录功能变更
login(val:HeaderData) {
      console.log('In service -> '+val);
      const val1=new HeaderData(val.flag,val.loggedInName);
      this.loggedIn.next(val1);
}

【讨论】:

  • 我尝试使用您的方法,当我尝试编写时,它会打印 [Object, Object], :-> {{isLoggedIn$.flag | async}},它没有给我任何 o/p 或错误。
  • 只需输入subscribe 函数并检查您获得的值。可能有两种情况。首先,没有设置值。其次,没有调用登录功能。我已经更改了答案中的登录功能。
  • 我已经尝试了订阅功能(如上面 header.component.ts 所示),它工作得非常好,我正在获取所有数据并能够在我的 html 页面上输出它,当我没有明确提供订阅功能时,就会出现问题
  • 答案中有问题将this.isLoggedIn = this._headerNavigation.isLoggedIn;更改为this.isLoggedIn$ = this._headerNavigation.isLoggedIn;
  • 是的,我第一次意识到,但它仍然无法正常工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-24
  • 1970-01-01
  • 2022-12-14
  • 2017-10-11
  • 2020-03-13
  • 1970-01-01
相关资源
最近更新 更多