/ / Come usare la notazione a punti per chiamare un plug-in Cordova? - angolare, cordova, dattiloscritto, ionico2, ionico3

Come usare la notazione dot per chiamare un plug-in Cordova? - angolare, cordova, dattiloscritto, ionico2, ionico3

Ho un progetto in cui sto usando Ionic2 / Cordova Plugins / Android.

$ mkdir stackoverflow-question
$ cd stackoverflow-question
$ git clone https://github.com/napolev/stackoverflow-question.git .
$ npm install
$ ionic platform add android
$ ionic run android -l

Questo progetto funziona correttamente. È fondamentalmente a Hello World progetto. Quando si fa clic sul pulsante sullo schermo si ottiene il messaggio Hello, World restituito da a Cordova collegare.

Il mio problema è che sulla linea 17:

https://github.com/napolev/stackoverflow-question/blob/75ecff023a250e14752762582a078d038957c89a/src/pages/home/home.ts#L17

Voglio usare:

window.hello.greet(...)

invece di

window["hello"].greet(...)

ma quando uso: window.hello.greet(...) Ottengo l'errore:

Property "hello" does not exist on type "Window".

Come puoi vedere nell'immagine seguente:

inserisci la descrizione dell'immagine qui

Qualche idea su come usare la notazione dot per fare uso di una custom Cordova collegare?

[EDIT 1]

Come da @sebaferreras suggerimento sul suo commento ho cambiato il codice nel modo seguente e funziona correttamente:

import { Component } from "@angular/core";
import { NavController } from "ionic-angular";

@Component( {
selector: "page-home",
templateUrl: "home.html",
})
export class HomePage {

private window: any = window;
private greet: string;

constructor(
public navCtrl: NavController,
) {}

private doGreet() {
this.window.hello.greet("World", (message) => {
this.greet = message;
}, () => {
this.greet = "[ERROR]";
});
}
}

ma mi piacerebbe sapere:

  1. è una buona pratica da fare: private window: any = window;

  2. c'è qualche altro tipo più specifico di any che posso usare sulla linea sopra?

risposte:

1 per risposta № 1

Poiché quell'errore è solo Typescript che si lamenta di non sapere nulla di a hello proprietà nel window oggetto, puoi lanciare il window oggetto a any come questo:

(<any>window).hello.greet(...)

modificare

Se vuoi evitare il cast any, potresti creare la tua classe basata su Window classe come questa:

export interface IGreetingService {
greet(): void; // Here you can add any function signature
}

export class CustomWindow extends Window {
hello: IGreetingService;
}

Quindi potresti usarlo in questo modo:

(<any>CustomWindow).hello.greet(...)

O

private window: CustomWindow = window; // The cast is being done here!
this.window.hello.greet(...)

0 per risposta № 2

Solitamente si utilizzano plug-in personalizzati in Ionic / Cordova come questo: Aggiungi la seguente riga nella parte superiore del tuo file:

declare var NameOfTheJsModule

Puoi trovare il nome del modulo js in plugin.xml del plugin sotto la proprietà name:

<js-module src="www/inappbrowser.js" name="inappbrowser">
...
</js-module>

quindi in questo caso:

delcare var inappbrowser;

e usarlo per esempio

this.inappbrowser.show();