Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 在行为主题订阅中未定义_Angular_Rxjs - Fatal编程技术网

Angular 在行为主题订阅中未定义

Angular 在行为主题订阅中未定义,angular,rxjs,Angular,Rxjs,我试图订阅一个由父组件设置的行为主题,并将其放入子组件,我试图在我的组件中创建以下内容: export class ModuliComponent implements OnInit { public profilo: Profilo; constructor(public profiloService: ProfiloService) { } ngOnInit(): void { this.profiloService.dataProfilo.subscribe(dat

我试图订阅一个由父组件设置的
行为主题
,并将其放入子组件,我试图在我的组件中创建以下内容:

export class ModuliComponent implements OnInit {
  public profilo: Profilo;

  constructor(public profiloService: ProfiloService) { }

  ngOnInit(): void {
    this.profiloService.dataProfilo.subscribe(data => this.profilo = data); // setting profilo
  }

}
但是当我尝试在HTML中使用
profilo
时,我只会在
asporto
或其他*ngIf上得到
undefined

我做错了什么?我是否应该首先初始化
profilo
?如果是这样,即使通过设置
onInit
或在
constructor
profilo=new profilo()我得到未定义的相同错误

如果我将console.log设置为subscribe,它将返回正确的数据,因此asporto和subscribe中的其他内容不是未定义的

这里要求的是ProfiloService

@Injectable({
  providedIn: 'root'
})
export class ProfiloService {

  public dataProfilo = new BehaviorSubject<any>([]);

  constructor(private http: HttpClient, private adapter: ProfiloAdapter) { }

  profilo(idNegozio: string): Observable<Profilo>{
    return this.http
    .get(`${Globals.API_URL}/profilo/${idNegozio}`)
    .pipe(map((data: any) => this.adapter.adapt(data)));
  }
}
Console.Log来自订阅数据

编辑:

如果我添加了父div
*ngIf=“profilo.moduli”
,它会工作得很好,但是在这一点上,如果profilo是未定义的w为什么它不足以在html中使用一个简单的
*ngIf=“profilo”

?接线员

<div *ngIf="profilo?.moduli?.ticketing" ></div>

在html中使用?接线员

<div *ngIf="profilo?.moduli?.ticketing" ></div>

初始化子组件时,profilo变量未定义,API返回数据时profilo变量只有数据。因此,u可以使用“?”运算符或按如下方式检查profilo var

<div *ngIf="profilo?.moduli?.ticketing" ></div>


初始化子组件时,profilo变量未定义,API返回数据时profilo变量只有数据。因此,u可以使用“?”运算符或按如下方式检查profilo var

<div *ngIf="profilo?.moduli?.ticketing" ></div>


如果默认情况下将有一个空数组,并检查它是否在模板中未定义,我建议您改为与buffer 1一起使用。它类似于
BehaviorSubject
,但不需要默认值

@可注入({
providedIn:'根'
})
出口级ProfiloService{
public dataProfilo=改为使用新的ReplaySubject管道。至少,它解决了取消订阅问题

子组件

导出类ModuleComponent实现OnInit{
公共利润$:可见;
构造函数(公共profiloService:profiloService){}
ngOnInit():void{
this.profilo$=this.profiloService.dataProfilo;
}
}
模板


...

标记中的模板不必更改,因为我们使用
*ngIf
指令的
作为
签名来表示可观察的当前值。

如果默认情况下要有一个空数组,并检查它在模板中是否未定义,我建议您使用缓冲区1。它类似于
BehaviorSubject
,但不需要默认值

@可注入({
providedIn:'根'
})
出口级ProfiloService{
public dataProfilo=改为使用新的ReplaySubject管道。至少,它解决了取消订阅问题

子组件

导出类ModuleComponent实现OnInit{
公共利润$:可见;
构造函数(公共profiloService:profiloService){}
ngOnInit():void{
this.profilo$=this.profiloService.dataProfilo;
}
}
模板


...


标记中的模板不必更改,因为我们使用
*ngIf
指令的
作为
签名来表示可观察的当前值。

分享
ProfiloService
的相关代码service@Satpal在
订阅中添加了服务
你能做什么
合作吗nsole.log(data)
并请使用控制台数据或console@SivakumarTadisetti添加了console.log,如果在服务中我将
BehaviorSubject
设置为new
BehaviorSubject(new Profilo);
并且我将执行
*ngIf=“Profilo.id”
而不是
*ngIf=“Profilo”
它会起作用,但我希望有一个更干净的解决方案,其中profilo未定义,并且
*ngIf=“profilo”
分享
ProfiloService
的相关代码service@Satpal在
subscribe
canyoudo
console.log(数据)中添加了服务
并请使用控制台数据或console@SivakumarTadisetti添加了console.log,如果在服务中我将
BehaviorSubject
设置为new
BehaviorSubject(new Profilo);
并且我将执行
*ngIf=“Profilo.id”
而不是
*ngIf=“Profilo”
它会起作用,但我希望有一个更干净的解决方案,其中profilo未定义,
*ngIf=“profilo”
但为什么*ngIf=“profilo”如果profilo未定义,则返回错误而不是false?您的服务返回响应吗?您可以共享您的响应吗?服务返回响应的方式就像我将
console.log
设置为
this.profiloService.dataProfilo.subscribe(data=>console.log(data));
它返回所有的值。您可以共享您的响应吗?您的Profilo接口是否有端口?但为什么*ngIf=“Profilo”如果profilo未定义,则返回错误而不是false?您的服务返回响应吗?您可以共享您的响应吗?服务返回响应的方式就像我将
console.log
设置为
this.profiloService.dataProfilo.subscribe(data=>console.log(data))
它返回所有值扫描您是否可以共享您的响应?您的Profilo接口是否有端口?