Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.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
Angular5服务呼叫在ngOnInit上不起作用_Angular_Typescript_Ngoninit - Fatal编程技术网

Angular5服务呼叫在ngOnInit上不起作用

Angular5服务呼叫在ngOnInit上不起作用,angular,typescript,ngoninit,Angular,Typescript,Ngoninit,当我导航到results组件时,ngOnInit中的服务按预期工作。然后我打开侧菜单,导航到另一个页面,然后再次导航到结果页面。但是这次页面不会呈现结果,而是呈现ng模板。控制台上没有错误,什么都没有。ngOnInit正在工作,正在显示console.log('init');但是服务电话没有。如果我将服务调用粘贴到构造函数或函数中,它也不会工作。我试过使用和不使用ngZone,什么都没有 我需要提到的是,如果我直接在结果页面上按F5,它就会工作。 就在我通过this.router.navigat

当我导航到results组件时,ngOnInit中的服务按预期工作。然后我打开侧菜单,导航到另一个页面,然后再次导航到结果页面。但是这次页面不会呈现结果,而是呈现ng模板。控制台上没有错误,什么都没有。ngOnInit正在工作,正在显示console.log('init');但是服务电话没有。如果我将服务调用粘贴到构造函数或函数中,它也不会工作。我试过使用和不使用ngZone,什么都没有

我需要提到的是,如果我直接在结果页面上按F5,它就会工作。 就在我通过
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,它会正常工作