如何从解析平台检索对象并使用 Typescript 显示它们?
How to retrieve objects from parse platform and show them using Typescript?
我想检索存储在解析平台中的对象,并且我正在使用离子框架。
所以我在 Home.ts 中写了这段代码:
export class HomePage {
result: string = 'sample' ;
constructor(public navCtrl: NavController) {
Parse.serverURL = 'https://parseapi.back4app.com/';
Parse.initialize("MY_APP_ID", "MY_JS_KEY");
var GameScore = Parse.Object.extend("GameScore");
var query = new Parse.Query(GameScore);
query.get("wN9bVUA9Hu", {
success: function(gameScore) {
// The object was retrieved successfully.
this.result = gameScore.get("score").toString();
console.log(this.result);
},
error: function(object, error) {
// The object was not retrieved successfully.
// error is a Parse.Error with an error code and message.
}
});
}
}
并且对象的 id 是 = wN9bVUA9Hu,所以应该检索对象的分数,即 9。
但正如您在这里看到的:result
结果在 Home.html 中没有改变,但在控制台中,它是 9。
这是我的 Home.html 代码:
<ion-header>
<ion-navbar>
<ion-title>
Ionic Blank
</ion-title>
</ion-navbar>
</ion-header>
<ion-content padding>
<h4>{{result}}</h4>
</ion-content>
如何解决这个问题并在 Home.html 中显示检索到的对象?
谢谢。
Angular 将许多默认输入和输出事件(例如按钮单击、http 请求等)包装在区域内。这样,Angular 知道什么时候发生了什么,并且它知道由于发生了什么它可能需要更新绑定。
然而,一些库(看起来 parse 在这里做的)会发出 Angular 没有包装并且不知道的事件,所以代码可以在 运行 之外结束一个区域。要解决此问题,您可以手动将代码放回区域。
尝试更改:
success: function(gameScore) {
// The object was retrieved successfully.
this.result = gameScore.get("score").toString();
console.log(this.result);
},
成为:
success: function(gameScore) {
this.zone.run(() => {
this.result = gameScore.get("score").toString();
console.log(this.result);
});
},
您需要将 private zone: NgZone
添加到您的构造函数并添加 import { NgZone } from '@angular/core';
以导入 NgZone
.
进一步阅读:
https://medium.com/@MertzAlertz/what-the-hell-is-zone-js-and-why-is-it-in-my-angular-2-6ff28bcf943e
对不起,这对我来说应该是显而易见的,但我的眼睛却忽略了这些东西。
var func1 = () => console.log(this.result);
var func2 = function { console.log(this.result); }
这两个说法是不一样的。在可能的情况下,如果您使用箭头函数(例如 func1
),您的理智将会得到改善。它们是 JavaScript 的新版本,因此您看到的许多示例将不包括它们。
在箭头函数中 this
指向函数内部和外部相同的对象。使用 function
语法 this
被重新分配给其他东西,具体取决于它的调用方式。所以在你的代码中,当你说 this.result = gameScore.get("score").toString();
时,问题是 this
没有引用 HomePage
.
的实例
如果您需要保留 function
语法(一些库依赖于 this
的重新分配),那么您必须执行类似...
const self = this;
query.get("wN9bVUA9Hu", {
success: function(gameScore) {
self.result = gameScore.get("score").toString();
},
error: function(object, error) {
// The object was not retrieved successfully.
// error is a Parse.Error with an error code and message.
}
});
}
我想检索存储在解析平台中的对象,并且我正在使用离子框架。 所以我在 Home.ts 中写了这段代码:
export class HomePage {
result: string = 'sample' ;
constructor(public navCtrl: NavController) {
Parse.serverURL = 'https://parseapi.back4app.com/';
Parse.initialize("MY_APP_ID", "MY_JS_KEY");
var GameScore = Parse.Object.extend("GameScore");
var query = new Parse.Query(GameScore);
query.get("wN9bVUA9Hu", {
success: function(gameScore) {
// The object was retrieved successfully.
this.result = gameScore.get("score").toString();
console.log(this.result);
},
error: function(object, error) {
// The object was not retrieved successfully.
// error is a Parse.Error with an error code and message.
}
});
}
}
并且对象的 id 是 = wN9bVUA9Hu,所以应该检索对象的分数,即 9。 但正如您在这里看到的:result
结果在 Home.html 中没有改变,但在控制台中,它是 9。
这是我的 Home.html 代码:
<ion-header>
<ion-navbar>
<ion-title>
Ionic Blank
</ion-title>
</ion-navbar>
</ion-header>
<ion-content padding>
<h4>{{result}}</h4>
</ion-content>
如何解决这个问题并在 Home.html 中显示检索到的对象?
谢谢。
Angular 将许多默认输入和输出事件(例如按钮单击、http 请求等)包装在区域内。这样,Angular 知道什么时候发生了什么,并且它知道由于发生了什么它可能需要更新绑定。
然而,一些库(看起来 parse 在这里做的)会发出 Angular 没有包装并且不知道的事件,所以代码可以在 运行 之外结束一个区域。要解决此问题,您可以手动将代码放回区域。
尝试更改:
success: function(gameScore) {
// The object was retrieved successfully.
this.result = gameScore.get("score").toString();
console.log(this.result);
},
成为:
success: function(gameScore) {
this.zone.run(() => {
this.result = gameScore.get("score").toString();
console.log(this.result);
});
},
您需要将 private zone: NgZone
添加到您的构造函数并添加 import { NgZone } from '@angular/core';
以导入 NgZone
.
进一步阅读:
https://medium.com/@MertzAlertz/what-the-hell-is-zone-js-and-why-is-it-in-my-angular-2-6ff28bcf943e
对不起,这对我来说应该是显而易见的,但我的眼睛却忽略了这些东西。
var func1 = () => console.log(this.result);
var func2 = function { console.log(this.result); }
这两个说法是不一样的。在可能的情况下,如果您使用箭头函数(例如 func1
),您的理智将会得到改善。它们是 JavaScript 的新版本,因此您看到的许多示例将不包括它们。
在箭头函数中 this
指向函数内部和外部相同的对象。使用 function
语法 this
被重新分配给其他东西,具体取决于它的调用方式。所以在你的代码中,当你说 this.result = gameScore.get("score").toString();
时,问题是 this
没有引用 HomePage
.
如果您需要保留 function
语法(一些库依赖于 this
的重新分配),那么您必须执行类似...
const self = this;
query.get("wN9bVUA9Hu", {
success: function(gameScore) {
self.result = gameScore.get("score").toString();
},
error: function(object, error) {
// The object was not retrieved successfully.
// error is a Parse.Error with an error code and message.
}
});
}