您能告诉我Component
应用中Page
和Ionic 3
生成器之间的区别吗?看来我也可以在组件中使用像ionViewWillLeave
这样的页面生命周期钩子。那么什么时候我应该使用角度生命周期钩子呢?如果它是相同的那么为什么它有2个发电机?希望你能为此提供反馈。
组件生成器:
ionic generate component SubscribeTopicComponent
页面生成器:
ionic generate page LoginPage
答案 0 :(得分:48)
根据评论中的对话:
从Angular的角度来看可能是相同的,但是Pages和Components在Ionic中有不同的含义。 就Angular而言,两者都只是组件,但在Ionic的上下文中,Page是一个充当整个视图的组件 (它可能有嵌套组件);我们将Ionic页面视为独立概念。在Angular应用程序中,组件大部分时间只是更大组件的一部分,所以我猜这是与Pages的最大区别。
关于使用Angular的生命周期钩子时,我喜欢在嵌套组件中使用它们,但在页面上工作时我更喜欢Ionic生命周期钩子。主要是因为ionViewWillEnter
之类的东西在ngOnInit
所做的简单组件的上下文中没有太大意义。话虽这么说,我还在页面上使用了一些Angular生命周期钩子,比如ngOnDestroy
(我用它来删除页面中的所有订阅,当该页面将被销毁时),但就像你说的那样,{如果我们想使用Ionic的生命周期钩子,{1}}似乎是正确的方法。
我认为大多数的Ionic生命周期挂钩与用户与整个页面的交互方式更相关(将进入页面,将离开从一个页面,可以进入一个页面,可以从一个页面离开...)和Angular生命周期钩子与单个组件的生命的不同阶段更相关(输入已经初始化,变更检测器已检查此组件是否有变化,...),正如您所看到的,可能与用户交互根本没有直接关系,通常是用户不知道的事情。 / p>
我很确定没有关于哪种方法更好的规则,但最重要的是一致性。 我认为在作为Pages的组件中使用Ionic生命周期钩子是有意义的,并在嵌套组件中使用Angular生命周期钩子,但是你可以使用不同的方法,只要你在整个应用程序。
答案 1 :(得分:6)
有两个独立的生成器,因为一个额外的装饰器被添加到离子:@IonicPage
这个装饰器比简单的组件有一些优点。
路由 - 您可以表示页面的网址是什么,如何到达那里以及它的默认历史记录是什么。有了这个,您可以直接访问任何页面,而无需通过导航路径。到此页面的路由也可以使用字符串而不是实际组件
延迟加载 - 当转到页面的网址时,默认情况下,具有此装饰器的页面模块将被延迟加载。
没有应用程序模块的依赖 - 这更像是个人喜爱的,但是当您创建页面模块时,您不必将它们添加到原始ngModule中,这是在编译时自动完成的。
有关更多文档: https://ionicframework.com/docs/api/navigation/IonicPage/