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