Typescript TypeError:无法读取undefined的属性

时间:2017-10-02 13:46:09

标签: angular cordova typescript cordova-plugins ionic3

我是打字稿的新手。我认为这个问题与打字稿有关。 我正在构建一个离子应用程序。我从home.html调用函数setwall()。我在home.ts中定义了setwall()函数。当我运行离子应用程序时显示

Runtime Error
Uncaught (in promise): TypeError: Cannot read property 'wallpaper' of undefined TypeError: Cannot read property 'wallpaper' of undefined"

这是我的home.ts。

代码
import { Component } from '@angular/core';
import { NavController,Platform } from 'ionic-angular';
import { ListPage } from '../list/list';

declare var window: any;
@Component({
  selector: 'page-home',
  templateUrl: 'home.html'
})
export class HomePage {
  constructor(public navCtrl: NavController,private platform: Platform) {
}
goPage1(){
  this.navCtrl.push(ListPage);
}
setwall(){
  this.platform.ready().then(() => {
  window['plugins'].wallpaper.setImage("assets/img/3.jpg");
});
}
} 

还有更多信息: 这是home.html代码

<ion-header>
  <ion-navbar>
    <button ion-button menuToggle>
      <ion-icon name="menu"></ion-icon>
    </button>
    <ion-title>Wallfeed</ion-title>
  </ion-navbar>
</ion-header>

<ion-content class="card-background-page">

    <ion-card (click)="goPage1()">
      <img src="assets/img/1.png"/>
      <div class="card-title">São Paulo</div>
      <div class="card-subtitle">41 Listings</div>
    </ion-card>

    <ion-card>
      <img src="assets/img/2.jpg"/>
      <div class="card-title">Amsterdam</div>
      <div class="card-subtitle">64 Listings</div>
    </ion-card>

    <ion-card (click)="setwall()">
      <img src="assets/img/3.jpg"/>
      <div class="card-title">San Francisco</div>
      <div class="card-subtitle">72 Listings</div>
    </ion-card>

    <ion-card>
      <img src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ16sUl5EqIDeuP1AjIX6ESSbAFAcS2-JLr4znf-extlfIr47Ni"/>
      <div class="card-title">Madison</div>
      <div class="card-subtitle">28 Listings</div>
    </ion-card>

  </ion-content>

指向cordova插件的链接:https://github.com/fbsanches/cordova-plugin-wallpaper 感谢。

1 个答案:

答案 0 :(得分:1)

您可以尝试如下所示。

declare var window: any;

@Component({
selector: 'page-home',
templateUrl: 'home.html'
})
export class HomePage {
constructor(public navCtrl: NavController,private platform: Platform) {

 }

 goPage1(){
   this.navCtrl.push(ListPage);
  }

 setwall(){
    this.platform.ready().then(() => {
    window.plugins.wallpaper.setImage("./assets/img/3.jpg"); //Changed here
  });
 }
}