Angular 5 .- Components 属性没有被更新???为啥?

Posted

技术标签:

【中文标题】Angular 5 .- Components 属性没有被更新???为啥?【英文标题】:Angular 5 .- Components property is not beeing updated??? why?Angular 5 .- Components 属性没有被更新???为什么? 【发布时间】:2018-12-15 04:16:18 【问题描述】:

所以我有这个progressLoaderComponent:

import  Component, OnInit  from '@angular/core';
import  Subscription  from 'rxjs/Subscription';

import  ProgressLoaderService  from './progress-loader.service';

@Component(
  selector: 'app-progress-loader',
  templateUrl: './progress-loader.component.html',
  styleUrls: ['./progress-loader.component.scss']
)
export class ProgressLoaderComponent implements OnInit 

  public prgLoaderSubscription: Subscription;

  // Loader Type
  public prgLoaderType;  

  constructor(private _pl: ProgressLoaderService) 
    this.prgLoaderType = 'spinner';
   

  ngOnInit() 
    this.prgLoaderSubscription = this._pl.loaderSubject$.subscribe(data => 
      this.prgLoaderType = data.loaderType;
      console.log('**************************', this.prgLoaderType);
    );
  


还有progressLoaderSerice:

import  Injectable  from '@angular/core';
import  Subject  from 'rxjs/Subject';
import  Observable  from 'rxjs/Observable';


@Injectable()
export class ProgressLoaderService 

  private loaderSubject = new Subject<any>();
  public loaderSubject$ = this.loaderSubject.asObservable();

  constructor()  

  setLoaderType(loaderType) 
    this.loaderSubject.next(loaderType: loaderType);
  


我从另一个组件调用setLoaderType(),例如: this._pl.setLoaderType('WTF!!!');

现在progressLoaderComponents onInit()-subscription 中的console.log() 确实输出WTF!!!,但无论我尝试什么,prgLoaderType 属性都没有更新。这怎么可能?

【问题讨论】:

你能为此添加一个堆栈闪电战吗? 谁调用了setLoaderType() 函数? @Luca .. 另一个组件 你也可以发一下吗? 【参考方案1】:

根据您的共享代码,我在 stackblitz 上创建了一个 Angular 项目。

看看。 https://stackblitz.com/edit/***-51212347

我认为您的代码没有任何问题。它应该按原样工作,我没有修改它。查看app.module.ts 看看你是否正确导入了。同样在 app.component.ts 中,我每隔 1 秒调用一次您的服务,持续 10 秒,您可以看到每次都在设置组件中的变量。

【讨论】:

以上是关于Angular 5 .- Components 属性没有被更新???为啥?的主要内容,如果未能解决你的问题,请参考以下文章

ngRx 官方示例分析 - 5. components

[Angular 2] Passing data to components with @Input

Angular、Vue、React、Web Components、Blazor、Javascript、jQuery和ASP.NET Framework,

如何在 Angular 1.5 组件中使用绑定

如何使用 TypeScript 将多个参数传递给 Angular 中的 @Directives (@Components)?

如何根据条件配置Angular 5中的app-routing.module来加载两个子路由模块中的一个或另一个?