ionViewDidLoad()函数的目的是什么?

Moh*_*opi 21 typescript ionic-framework ionic2 ionic3 angular

在运行时,ionic g page pageName我会生成.ts,.css和.html文件.

在.ts文件中,我有一个调用的函数ionViewDidLoad(){},在我的视图出现之前会打印出来.

我相信这可以在构造函数中完成吗?

有人可以给我一些关于这个功能的博客或解释吗?

seb*_*ras 30

你是对的,很多事情都可以在构造函数中完成,或者在ionViewDidLoad结果中也是如此......

但是之间的主要区别constructorionViewDidLoad 在于,constructor将只有一次(当组件被实例化)执行,但ionViewDidLoad方法将被执行每当输入了视图(加载).

例如,如果要从远程数据源加载数据,如果在构造函数中执行此操作,则只能获取一次数据.如果该数据可以足够快地改变,则更好的方法是在ionViewDidLoad方法中获得它,以确保每次加载页面时,获取最新数据并在视图中显示.

另一个重要的事实ionViewDidLoad是,有时你想与DOM交互(可能是为了初始化地图).

在这种情况下,如果您尝试在构造函数中访问DOM,您会注意到DOM没有准备就绪,您将无法获取map元素.这样做的正确方法是在内部,ionViewDidLoad因为在那一点(就像名字所说),视图已经加载,DOM现在可用.

更新:

就像@graphefruit在下面的评论中指出的那样,在最新版本的Ionic 2中,ionViewDidLoad如果页面没有被缓存ionViewWillEnterionViewDidEnter,就会触发.或者每次输入页面时都会被解雇.

  • @sebaferreras你的答案不再正确.如果页面未缓存,则仅触发ionViewDidLoad.每次输入页面时都会触发https://ionicframework.com/docs/v2/2.0.0-rc.0/api/navigation/NavController/`ionViewWillEnter`或`ionViewDidEnter` (7认同)

Luc*_* C. 9

constructor 在所有的实例化之前调用,在这里你可以进行不引用HTML DOM的初始化

ionViewDidLoad 在页面DOM被加载时被调用,在显示页面之前,也是每页实例化一次,这里你可以做初始化,需要HTML DOM准备好

ionViewWillEnter 在页面显示之前调用,如果页面在后台返回并返回,则可以多次调用,如果可以在另一页面中更改数据,则可以刷新数据

ionViewDidEnter 是相同但在页面显示后调用,如果页面在后台进行并返回,可能会多次调用,例如,当页面在页面前面时,您可以显示警报