应用程序启动时Nativescript更新http响应

应用程序启动时Nativescript更新http响应,nativescript,angular2-nativescript,Nativescript,Angular2 Nativescript,我继承了一个从API端点获取数据的应用程序。我们发现,当我们更改API上的数据时,这些更改不会反映在应用程序中。如果我们在移动设备上卸载并重新安装应用程序,则会显示API中的新数据。以下是建筑详图页面的示例: import { Component, OnInit } from '@angular/core'; import { ActivatedRoute } from "@angular/router"; import { switchMap } from 'rxjs/operators';

我继承了一个从API端点获取数据的应用程序。我们发现,当我们更改API上的数据时,这些更改不会反映在应用程序中。如果我们在移动设备上卸载并重新安装应用程序,则会显示API中的新数据。以下是建筑详图页面的示例:

import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from "@angular/router";
import { switchMap } from 'rxjs/operators';
import { Building } from "../shared/building/building";
import { HttpService } from "../services/http/http.service";
import {
    getString,
    setString
} from "application-settings";

@Component({
    moduleId: module.id,
    selector: 'building-detail',
    templateUrl: 'building-detail.component.html',
    styleUrls: ["./building-detail-common.css"],
    providers: [ Building, HttpService ]
})

export class BuildingDetailComponent implements OnInit {
    paramName: string;
    constructor(
        private route: ActivatedRoute, 
        public building: Building, 
        private httpService: HttpService) {
        this.route.params.subscribe(
            (params) => {
                this.paramName = params['name']
            } 
        );
    }

    ngOnInit() {
        console.log("ON INIT FIRED " + this.paramName);
        let buildingInfo = JSON.parse(getString("buildingInfo"));
        for (let item of buildingInfo) {
            if (item.attributes.title === this.paramName) {
                this.building.name = item.attributes.title;
                this.building.desc = item.attributes.body.value;
                let imageEndpoint = "file/file/" + item.relationships.field_building_image.data.id;
                let imageUrl = this.httpService.getData(imageEndpoint)
                .subscribe(data => { 
                    this.building.image = "https://nav.abtech.edu" + data['data'].attributes.url;
                    console.log("The building image URL is " + this.building.image);
                }, (error) => {
                    console.log("Error is " + error);
                });
            }
        }

     }
}

如果您想查看其他文件/代码,我很乐意与您分享。谢谢

ngOnInit
是仅在创建组件时才执行的东西,它将永远不会再次执行

应用程序启动和恢复之间也有区别,如果您想在用户每次打开应用程序时更新数据,您应该在
ngZone


如果要在后端数据发生更改时立即通知用户,甚至可以使用推送通知/数据消息

ngOnInit
只有在创建组件时才会执行,它将永远不会再次执行

应用程序启动和恢复之间也有区别,如果您想在用户每次打开应用程序时更新数据,您应该在
ngZone


如果您想在后端数据更改时立即通知用户,甚至可以使用推送通知/数据消息

不更新数据的原因不是因为没有执行ngOnInit,而是因为您正在缓存旧值并在每次运行应用程序时重新加载它。您正在使用appSettings跨应用程序运行持久缓存数据,这就是为什么在卸载之前,这些值保持不变的原因


如果您不想显示缓存的值,请不要从应用程序设置中读取,或者至少在刷新数据一次之前不要从应用程序设置中读取。

您的数据未被更新的原因不是因为没有执行ngOnInit,而是因为您正在缓存旧值并在每次运行应用程序时重新加载它。您正在使用appSettings跨应用程序运行持久缓存数据,这就是为什么在卸载之前,这些值保持不变的原因


如果不想显示缓存的值,请不要读取应用程序设置,或者至少在刷新数据一次之前不要读取应用程序设置。

哪个平台存在此问题?你能给我们看一下你所看到的东西的GIF吗?下面是应用程序的截图:我特别要求提供GIF的原因是为了了解你到底面对的是什么
ngonit
是一种只有在创建组件时才执行的东西,它将永远不会再次执行。应用程序启动和恢复之间也有区别,如果你想在用户每次打开应用程序时更新数据,你应该在ngZone内监听恢复事件并执行API调用。数据在后端不会经常更改。是否有办法强制已安装应用程序的用户重新安装。可能会升级版本?对不起,这完全没有必要或者根本没有意义。只要在需要时获取数据,就像用户打开/恢复应用程序时一样。如果要在后端数据更改时立即通知用户,请使用推送通知/数据消息。您在哪个平台上遇到此问题?你能给我们看一下你所看到的东西的GIF吗?下面是应用程序的截图:我特别要求提供GIF的原因是为了了解你到底面对的是什么
ngOnInit
是仅在创建组件时才执行的东西,它将永远不会再次执行。应用程序启动和恢复之间也有区别,如果你想在用户每次打开应用程序时更新数据,你应该在ngZone内监听恢复事件并执行API调用。数据在后端不会经常更改。是否有办法强制已安装应用程序的用户重新安装。可能会升级版本?对不起,这完全没有必要或者根本没有意义。只要在需要时获取数据,就像用户打开/恢复应用程序时一样。如果要在后端数据更改时立即通知用户,请使用推送通知/数据消息。