应用程序启动时 Nativescript 更新 http 响应
Nativescript update http response when app launches
我继承了一个应用程序,它从 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);
});
}
}
}
}
如果您想查看这些内容,我很乐意分享其他 files/code。谢谢!
ngOnInit
是只在你的组件创建时执行的东西,它永远不会再次执行。
App launch 和 resume 也有区别,如果你想在用户每次打开应用时更新数据,你应该监听 resume 事件并在 ngZone
中执行 apis 调用
如果你想在后端数据改变时立即通知用户,你甚至可以使用推送通知/数据消息
你的数据没有被更新的原因不是因为 ngOnInit 没有被执行,而是因为你正在缓存旧值并在每次应用 运行 时重新加载它。您使用 appSettings 跨应用程序 运行 持续缓存数据,这就是为什么您看到值在卸载之前保持不变的原因。
如果您不想显示缓存值,请不要从应用设置中读取,或者至少在刷新数据一次之前不要从 appSettings 中读取。
我继承了一个应用程序,它从 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);
});
}
}
}
}
如果您想查看这些内容,我很乐意分享其他 files/code。谢谢!
ngOnInit
是只在你的组件创建时执行的东西,它永远不会再次执行。
App launch 和 resume 也有区别,如果你想在用户每次打开应用时更新数据,你应该监听 resume 事件并在 ngZone
如果你想在后端数据改变时立即通知用户,你甚至可以使用推送通知/数据消息
你的数据没有被更新的原因不是因为 ngOnInit 没有被执行,而是因为你正在缓存旧值并在每次应用 运行 时重新加载它。您使用 appSettings 跨应用程序 运行 持续缓存数据,这就是为什么您看到值在卸载之前保持不变的原因。
如果您不想显示缓存值,请不要从应用设置中读取,或者至少在刷新数据一次之前不要从 appSettings 中读取。