在运行 ionic g page pageName 时,我生成了.ts,.css和.html文件 .
ionic g page pageName
在.ts文件中我有一个名为 ionViewDidLoad(){} 的函数,在我的视图出现之前会打印出来 .
ionViewDidLoad(){}
我相信这可以在构造函数中完成吗?
有人可以给我一些关于这个功能的博客或解释吗?
你是对的,很多事情都可以在构造函数或_1713477中完成,结果也是一样的......
但 constructor 和 ionViewDidLoad 之间的主要区别在于构造函数只执行一次(当组件被实例化时),但每次进入(加载)视图时都会执行ionViewDidLoad方法 .例如,如果要从远程数据源加载数据,如果在构造函数中执行此操作,则只能获取一次数据 . 如果数据的变化速度足够快,更好的方法是在ionViewDidLoad方法中获取它,以确保每次加载页面时,都会获取最新数据并在视图中显示 .关于ionViewDidLoad的另一个重要事实是,有时你想与DOM交互(可能是为了初始化 Map ) .
constructor
ionViewDidLoad
在这种情况下,如果您尝试在构造函数中访问DOM,您会注意到DOM没有准备就绪,您将无法获取map元素 . 正确的方法是在 ionViewDidLoad 内部,因为在那一点(就像名字所说的那样)视图已经被加载并且DOM现在可用 .
UPDATE:
就像@graphefruit在下面的评论中指出的那样,在Ionic 2的最新版本中,如果页面没有被缓存,_1713482就会触发 . 每次输入页面时都会触发 ionViewWillEnter 或 ionViewDidEnter .
ionViewWillEnter
ionViewDidEnter
首先调用 constructor ,每次实例化一次页面,这里你可以做一些不引用HTML DOM的初始化
ionViewDidLoad 在页面DOM加载时被调用,在显示页面之前,也是每页实例化一次,这里你可以做初始化,需要HTML DOM准备好
ionViewWillEnter 在页面显示之前调用,如果页面在后台运行并返回,则可能多次调用,如果可以在另一页面中更改数据,则可以刷新数据
ionViewDidEnter 是相同的,但在页面显示后调用,如果页面在后台进行并返回,可能会多次调用,例如,当页面在页面前面时,您可以显示警报
2 回答
你是对的,很多事情都可以在构造函数或_1713477中完成,结果也是一样的......
但
constructor
和ionViewDidLoad
之间的主要区别在于构造函数只执行一次(当组件被实例化时),但每次进入(加载)视图时都会执行ionViewDidLoad方法 .例如,如果要从远程数据源加载数据,如果在构造函数中执行此操作,则只能获取一次数据 . 如果数据的变化速度足够快,更好的方法是在ionViewDidLoad方法中获取它,以确保每次加载页面时,都会获取最新数据并在视图中显示 .
关于ionViewDidLoad的另一个重要事实是,有时你想与DOM交互(可能是为了初始化 Map ) .
在这种情况下,如果您尝试在构造函数中访问DOM,您会注意到DOM没有准备就绪,您将无法获取map元素 . 正确的方法是在
ionViewDidLoad
内部,因为在那一点(就像名字所说的那样)视图已经被加载并且DOM现在可用 .UPDATE:
就像@graphefruit在下面的评论中指出的那样,在Ionic 2的最新版本中,如果页面没有被缓存,_1713482就会触发 . 每次输入页面时都会触发
ionViewWillEnter
或ionViewDidEnter
.首先调用
constructor
,每次实例化一次页面,这里你可以做一些不引用HTML DOM的初始化ionViewDidLoad
在页面DOM加载时被调用,在显示页面之前,也是每页实例化一次,这里你可以做初始化,需要HTML DOM准备好ionViewWillEnter
在页面显示之前调用,如果页面在后台运行并返回,则可能多次调用,如果可以在另一页面中更改数据,则可以刷新数据ionViewDidEnter
是相同的,但在页面显示后调用,如果页面在后台进行并返回,可能会多次调用,例如,当页面在页面前面时,您可以显示警报