ERROR TypeError: Cannot set property 'items' of null
这是以下结果:
</ion-card>
<button ion-button round outline
(click)="logEvent($startTrackingButton)">Start tracking me</button>
<ion-card>
<ion-item>
<h2>Locations:</h2>
<ion-list no-lines>
<h3 ion-item *ngFor="let item of items" (click)="itemSelected(item)">
{{ item }}
</h3>
</ion-list>
</ion-item>
</ion-card>
</ion-content>
(在Component.html中),现在为其.ts文件:
logEvent1(TrackNowButton) {
/*Initializing geolocation*/
// onSuccess Callback
// This method accepts a Position object,
// which contains the
// current GPS coordinates
var onSuccess = function(position) {
this.items = ([{
key: "1", value: {
Latitude: position.coords.latitude,
Longitude: position.coords.longitude
}
}, {
key: "2", value: {
Altitude: position.coords.altitude,
Accuracy: position.coords.accuracy
}
}, {
key: "3", value: {
Altitude_Accuracy: position.coords.altitudeAccuracy,
Heading: position.coords.heading
}
}, {
key: "4", value: {
Speed: position.coords.speed,
Timestamp: position.timestamp
}
}]);
};
// onError Callback receives a PositionError
// object
function onError(error) {
console.log('code: ' + error.code + '\n' + 'message: ' + error.message + '\n');
}
navigator.geolocation.getCurrentPosition(onSuccess, onError);
}
itemSelected(item: string) {
console.log("Selected Item", item);
}
我希望这是可读的......我不知道我在数据绑定方面做错了什么,因为我认为这是错误的地方......我也相信.ts中的部分有问题文件,我写的地方:this.items =(...)因为我认为该值不能绑定到html或其他东西。我正在研究一个经常跟踪运动的小程序,并用给定的参数记录它们。后来我想添加Mapbox支持,但我需要先解决一些错误。
您得到的错误表明this
为空。用箭头函数替换分配给onSuccess
的函数。它将使用this
的正确值。
var onSuccess = (position: any) => {
this.items = ([{
key: "1", value: {
Latitude: position.coords.latitude,
Longitude: position.coords.longitude
}
}, {
key: "2", value: {
Altitude: position.coords.altitude,
Accuracy: position.coords.accuracy
}
}, {
key: "3", value: {
Altitude_Accuracy: position.coords.altitudeAccuracy,
Heading: position.coords.heading
}
}, {
key: "4", value: {
Speed: position.coords.speed,
Timestamp: position.timestamp
}
}]);
};
您可以使用JSON.stringify
将所选项目转换为字符串:
itemSelected(item: any) {
console.dir(item);
let str = JSON.stringify(item);
...
}
另一方面,如果需要将每个项目定义为字符串,则可以为数组中的每个项目调用JSON.stringify
。
var onSuccess = (position: any) => {
this.items = ([JSON.stringify({
key: "1", value: {
Latitude: position.coords.latitude,
Longitude: position.coords.longitude
}
}), JSON.stringify({
key: "2", value: {
Altitude: position.coords.altitude,
Accuracy: position.coords.accuracy
}
}), JSON.stringify({
key: "3", value: {
Altitude_Accuracy: position.coords.altitudeAccuracy,
Heading: position.coords.heading
}
}), JSON.stringify({
key: "4", value: {
Speed: position.coords.speed,
Timestamp: position.timestamp
}
})]);
}
您只需要初始化数组,如下所示。
items:any = [];
之后,您可以像这样推送值:
this.items.push({ key: "1", value: { Latitude:
position.coords.latitude, Longitude: position.coords.longitude });
您的错误表明您的代码正在使用onSuccess方法。
您可以将此值分配给另一个在调用回调函数时使用的变量。请记住,回调并不总是在您所在的类的上下文中执行。因此,这可能是未定义的。
以下是您需要执行的操作:
logEvent1(TrackNowButton) {
let self = this;
onSuccess = (position)=>{
self.items = [
{key : '1', value : {} }
{key : '2', value : {} }
{key : '3', value : {} }
]
}
let onError = (error)=>{
console.log('code: ' + error.code + '\n' + 'message: ' + error.message + '\n');
}
navigator.geolocation.getCurrentPosition(onSuccess, onError);
}