Angular 通过ngOnInit()运行函数不适用于ionic 4

Angular 通过ngOnInit()运行函数不适用于ionic 4,angular,typescript,ionic-framework,ionic-native,ionic4,Angular,Typescript,Ionic Framework,Ionic Native,Ionic4,所以,我想在应用加载后尽快运行一个函数。我在爱奥尼亚4号上遇到了麻烦 我尝试使用ionViewDidLoad,但ionic4中不推荐使用ionViewDidLoad,因此我尝试使用ngOnInit,但这对我也不起作用 我试着通过点击一个按钮来获取纬度和经度,它工作正常,但我希望它在我的应用程序启动时自动显示出来 我的TS代码: import { Component, OnInit } from '@angular/core'; import { Geolocation } from '@ioni

所以,我想在应用加载后尽快运行一个函数。我在爱奥尼亚4号上遇到了麻烦

我尝试使用ionViewDidLoad,但ionic4中不推荐使用ionViewDidLoad,因此我尝试使用ngOnInit,但这对我也不起作用

我试着通过点击一个按钮来获取纬度和经度,它工作正常,但我希望它在我的应用程序启动时自动显示出来

我的TS代码:

import { Component, OnInit } from '@angular/core';
import { Geolocation } from '@ionic-native/geolocation/ngx';

@Component({
  selector: 'app-home',
  templateUrl: 'home.page.html',
  styleUrls: ['home.page.scss'],
})
export class HomePage implements OnInit {
  lati: any;
  long: any;

  constructor(private geolocation: Geolocation) {}

  ngOnInit() {
    this.geolocation.getCurrentPosition().then((resp) => {
      this.lati = resp.coords.latitude;
      this.long = resp.coords.longitude;
     }).catch((error) => {
       console.log('Error getting location', error);
     });
  }
}
我的HTML代码只是必要的部分:

<p id="lat">Latitude is {{lati}}</p>
<p id="lon">Longitude is {{long}}</p>
通常,这会导致如下结果:

纬度是我的纬度 经度是我的经度

但是,它不显示我的纬度和经度,只显示段落内容

我尝试过用相关关键字搜索,并实现了我找到的任何东西,但这还远远不够。考虑到离子4仍然是相当新的,没有太多的帮助可用

请帮助我,以便应用程序在启动时立即返回经度和纬度。

如果您将页面放入堆栈后返回页面,则不会触发此操作

您可以使用下一个生命周期挂钩之一:

ionViewWillEnter — 在进入页面时激发,如果页面从堆栈中返回

IonViewDiCenter — 如果从堆栈中返回,则在进入后也会被激发这对我很有效:

我在我的page.ts中添加了一个IonViewDiCenter函数,该函数在路由到的组件已设置动画时启动

有关更多信息,请参见


你有没有试过使用断点来查看你是否收到了有效的数据?@Batajus我仍然在学习这些东西。请你解释一下怎么做,这样我就可以试着去做了?另外,我想指出,当我通过点击按钮触发的功能启动Cordova Geolocation时,我收到了有效的坐标。我刚刚尝试了你用ionic 4显示的代码,它对我来说很好,所以很难帮助…@AJT_82我知道它应该工作,但显然不工作。请尝试在StackBlitz中重新创建这个问题,我很高兴看到它:ionic 4中删除了离子生命周期挂钩,以便更喜欢ng挂钩。不是很有帮助,不过还是要谢谢你!不,离子4的生命周期仍在Github中。现在只有ionViewDidLoad已替换为Ninit。另外,两个导航防护装置IonViewCanCenter和ionViewCanLeave也被移除,因为Angular Router提供路由防护。因此,如果我要求使用ionViewWillEnter和ionViewDidEnter解决上述问题,您会提供吗?对不起,我的无知。是的。。。你有没有试着用ionViewWillEnter,ionViewDidEnter来修复它?嗯,我刚刚遇到了这个解决方案,没有,它不起作用。
 ionViewDidEnter() {
    console.log(" loading map");
    setTimeout(this.loadMap.bind(this), 1000);
    console.log(" loaded map");
  }