【问题标题】:A the function that triggers always when displaying a component in an ionic2在ionic2中显示组件时始终触发的功能
【发布时间】:2016-08-15 17:19:00
【问题描述】:

在 ionic2 应用程序中显示组件时始终触发的函数是什么。

例如,我注意到组件中的 constructor 函数仅在组件第一次初始化或您从不同页面执行 push 时触发。

但是当点击back按钮或者在tabs之间切换时不会触发构造函数

有没有什么方法会在组件每次显示在屏幕上时调用?

更新

在做了一些研究之后(谷歌搜索的大词;))我意识到每个选项卡都保留了自己的历史堆栈。例如,如果我有两个标签 homesearch 什么曾经推送,弹出我在 search 表中做的独立于 home tab

所以我想做的是

  • search tab 中进行搜索
  • 点击搜索按钮 (search tab)
  • 应该重定向到home tab(不加载search tab本身的搜索结果)

我希望这能说明我的要求

【问题讨论】:

    标签: angular typescript ionic2


    【解决方案1】:

    您可以在结果标签页上使用ionViewDidEnter 事件。每次进入页面时都会执行该方法,因此在该方法中,您可以从服务中获取先前查询的结果。

    请看this plunker

    page2.html 文件中(这将是您的主页选项卡)我已包含以下内容:

      ionViewDidEnter(){
        this.result = this.tabService.result;
      }
    

    所以每次用户进入该页面时,我们都可以再次从服务中获取结果(如果用户没有填写上一个选项卡中的查询字段,则将使用上一个查询的结果)。

    【讨论】:

    • 嗨@sebaferreras,成功了?,非常感谢。但是我注意到如果您在组件中(在页面中)使用它,它将不起作用。直接在它工作的页面上。 (我对此很满意)。也谢谢你的笨蛋。干杯,山姆
    • 很高兴我能帮助 Sam :) 在哪种情况下它不起作用?如果您愿意,我们也可以找到一种方法使其适用于这种情况。
    • ionViewDidEnter 在组件中时似乎不起作用。例如,在您的 plunker 中,如果您从 page2.ts 内部的组件调用 ionViewDidEnter,而不是直接从 page2.ts,谢谢 :)
    • 我认为在这种情况下我们可以在子组件中使用@Output() childViewDidEnter = new EventEmitter();。因此,当在子组件中执行ionViewDidEnter() 方法时,我们可以执行类似this.childViewDidEnter.emit(true); 的操作并将其绑定到来自page2.ts 的方法,该方法再次像<child-component (ionViewDidEnter)="getResults($event)"></child-component> 一样获得结果,并在page2.ts 添加该方法: public getResults(){ this.result = this.tabService.result; }
    【解决方案2】:

    我相信ngOnInit() 是您要找的。每次初始化页面时(并且仅在接收到其数据绑定属性之后)都会调用您放入该函数中的任何内容。

    延伸阅读:https://angular.io/docs/ts/latest/api/core/index/OnInit-class.html

    希望这就是你要找的东西 :)

    【讨论】:

    • 嘿@kevin,感谢您的回答,但似乎ngOnInit() 在标签之间切换时不会触发;(
    • 您在选项卡之间重新加载页面的用例是什么?如果数据从一个选项卡更改到另一个选项卡,我的想法是 Angular 2 使其能够自动更新,从而无需重新加载页面。一个潜在的替代方法是在您单击选项卡时调用 router.navigate['/your-url']。
    • 嘿@kevin,我的工作流程是,我有一个搜索选项卡和一个列表选项卡。当用户选择搜索条件(从搜索选项卡)并单击搜索时,我将搜索查询保存在服务中并重定向到列表选项卡。列表选项卡将读取搜索查询并显示结果。 (这很好用)。但是当我切换标签(不点击搜索)时,我应该有一种方法来触发一种方法来读取任何以前的搜索查询。希望我没有让你感到困惑:)。如果您需要更多信息,请告诉我,再次感谢
    • 我相信实现这一目标的唯一方法是在 HTML 中添加 (click) = reloadTabInfo()。这样,通过该方法调用,您可以保证您正在重新加载页面。
    猜你喜欢
    • 2017-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-27
    • 2021-02-04
    • 2021-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多