Angular5服务呼叫在ngOnInit上不起作用
当我导航到results组件时,ngOnInit中的服务按预期工作。然后我打开侧菜单,导航到另一个页面,然后再次导航到结果页面。但是这次页面不会呈现结果,而是呈现ng模板。控制台上没有错误,什么都没有。ngOnInit正在工作,正在显示console.log('init');但是服务电话没有。如果我将服务调用粘贴到构造函数或函数中,它也不会工作。我试过使用和不使用ngZone,什么都没有 我需要提到的是,如果我直接在结果页面上按F5,它就会工作。 就在我通过Angular5服务呼叫在ngOnInit上不起作用,angular,typescript,ngoninit,Angular,Typescript,Ngoninit,当我导航到results组件时,ngOnInit中的服务按预期工作。然后我打开侧菜单,导航到另一个页面,然后再次导航到结果页面。但是这次页面不会呈现结果,而是呈现ng模板。控制台上没有错误,什么都没有。ngOnInit正在工作,正在显示console.log('init');但是服务电话没有。如果我将服务调用粘贴到构造函数或函数中,它也不会工作。我试过使用和不使用ngZone,什么都没有 我需要提到的是,如果我直接在结果页面上按F5,它就会工作。 就在我通过this.router.navigat
this.router.navigate(['/resultados'])导航到它的时候代码>
但它不起作用
这是结果部分:
import { Component, OnInit, NgZone } from '@angular/core';
import { Router, ActivatedRoute, ParamMap } from '@angular/router';
import { NavService } from '../shared/nav.service';
import {AngularFirestore} from 'angularfire2/firestore';
import {firestoreService} from '../shared/firestore.service';
import {Usuario} from '../../models/usuario'
@Component({
selector: 'resultados',
templateUrl: 'resultados.component.html'
})
export class ResultadosComponent implements OnInit {
servId:any;
users: Usuario[];
constructor(
private fService: firestoreService,
private service:NavService,
private router: Router,
private zone: NgZone
) { }
ngOnInit() {
console.log('init')
this.fService.getUsers().subscribe(users=>{
this.zone.run(()=>{
this.users = users;
})
})
}
}
这是结果HTML:
<div class="resultados" *ngIf="users?.length > 0;else noUsers">
<ul *ngFor="let user of users">
<li>{{user.uid}}</li>
</ul>
</div>
<ng-template #noUsers>
<hr>
<h5>Nenhum usuário cadastrado</h5>
</ng-template>
- {{user.uid}
Nenhum usuário cadastrado
这是firestore.service:
import { Injectable } from '@angular/core';
import {AngularFirestore, AngularFirestoreCollection,
AngularFirestoreDocument} from 'angularfire2/firestore';
import {Usuario} from '../../models/usuario'
import {Observable} from 'rxjs/Observable';
@Injectable()
export class firestoreService {
usersCollection: AngularFirestoreCollection<Usuario>;
users:Observable<Usuario[]>;
constructor(public afs:AngularFirestore){
this.users = this.afs.collection('users').valueChanges();
}
getUsers(){
return this.users;
}
}
从'@angular/core'导入{Injectable};
导入{AngularFirestore,AngularFirestoreCollection,
AngularFirestoreDocument}来自“angularfire2/firestore”;
从“../../models/Usuario”导入{Usuario}
从“rxjs/Observable”导入{Observable};
@可注射()
出口级消防服务{
usersCollection:AngularFirestoreCollection;
用户:可观察;
建造商(公共afs:AngularFirestore){
this.users=this.afs.collection('users').valueChanges();
}
getUsers(){
将此文件返回给用户;
}
}
在OnDestroy中使用unsubscribe有效!谢谢你@tam5
import { Component, OnInit, NgZone } from '@angular/core';
import { Router, ActivatedRoute, ParamMap } from '@angular/router';
import { NavService } from '../shared/nav.service';
import {AngularFirestore} from 'angularfire2/firestore';
import {firestoreService} from '../shared/firestore.service';
import {Usuario} from '../../models/usuario'
import { OnDestroy } from '@angular/core/src/metadata/lifecycle_hooks';
import { Subscription } from 'rxjs/Subscription'; //<== added this
@Component({
selector: 'resultados',
templateUrl: 'resultados.component.html'
})
export class ResultadosComponent implements OnInit , OnDestroy {
servId:any;
users: Usuario[];
private subscription: Subscription = new Subscription(); //<== added this
constructor(
private fService: firestoreService,
private service:NavService,
private router: Router,
private zone: NgZone
) {
}
ngOnInit() {
console.log('init')
this.subscription.add(this.fService.getUsers().subscribe(users=>{ //<== added this
this.zone.run(()=>{
this.users = users;
})
}))
}
ngOnDestroy(){ //<== added this
this.subscription.unsubscribe();
}
}
从'@angular/core'导入{Component,OnInit,NgZone};
从“@angular/Router”导入{Router,ActivatedRoute,ParamMap};
从“../shared/nav.service”导入{NavService};
从“angularfire2/firestore”导入{AngularFirestore};
从“../shared/firestore.service”导入{firestoreService};
从“../../models/Usuario”导入{Usuario}
从“@angular/core/src/metadata/lifecycle_hooks”导入{OnDestroy};
从'rxjs/Subscription'导入{Subscription}//对不起,但是你到底在那个构造器里干什么?删除所有这些this.router=router
方法,它们都是不必要的。此外,您可能需要阅读和了解每种情况发生的时间。OnInit仅在第一次onChanges事件后调用一次。很抱歉,这是因为页面未准备就绪。。现在删除。。好的,但问题不在于ngOnInit,它正在工作。里面的服务调用没有。请显示firestoreService代码我想我有过一次,最后通过更改RouterUseStrategy解决了这个问题,尽管我不确定这是否是正确的方法。。。我的猜测是,如果你取消订阅这个OnDestroy,它会正常工作