To use gapiand gapi.authwith Angular2, set script type definitions using NPM.
npm install --save @types/gapi
npm install --save @types/gapi.auth2
: @types/gapi @types/gapi.auth2 node_modules package.json.
node_modules, . Angular2 , :
main-app/
node_modules/
@types/
gapi/
gapi.auth2/
tsconfig.json, gapi gapi.auth2 ( ):
{
"compileOnSave": false,
"compilerOptions": {
"types": ["gapi", "gapi.auth2"]
}
}
Typescript , Node.js :
[...] . Node node_modules. node_modules , . Node , node_modules, , .
Angular2 ( , gapi gapi.auth2).
, gapi gapi.auth2 TypeScript, .ts, npm install ( , /// oherwise you ' ):
, , .ts , TypeScript.
TypeScript Node, .ts, Angular2 gapi . declare var gapi: any; .ts , . :
import { NgZone, Injectable, Optional } from '@angular/core';
declare var gapi: any;
(https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/gapi/index.d.ts), . , , .
JavaScript Typescript , , .
gapi ( Angular):
loadClient(): Promise<any> {
return new Promise((resolve, reject) => {
this.zone.run(() => {
gapi.load('client', {
callback: resolve,
onerror: reject,
timeout: 1000,
ontimeout: reject
});
});
});
}
...
-, , gapi.load , . GAPI:
- . , , , , .
-, gapi.load
this.zone.run(() => {
// gapi.load
});
NgZone.run
zone.run Angular , Angular [...]
, , gapi.load Angular. , , .
-, loadClient() , , , gapi.load. , loadClient Angular, apiLoaderServce, ngOnInit gapi:
ngOnInit(): void {
this.apiLoaderService.loadClient().then(
result => this.apiLoaded = true,
err => this.apiLoaded = false
);
}
gapi.load , gapi.client , JavaScript API, OAuth, (API) API:
initClient(): Promise<any> {
var API_KEY =
var DISCOVERY_DOC =
var initObj = {
'apiKey': API_KEY,
'discoveryDocs': [DISCOVERY_DOC],
};
return new Promise((resolve, reject) => {
this.zone.run(() => {
gapi.client.init(initObj).then(resolve, reject);
});
});
}
, NgZone.run Angular.
loadClient() initClient() Angular. Angular ( ) ngOnInit:
ngOnInit(): void {
this.apiLoaderService.loadClient().then(
result => {
this.apiLoaded = true;
return this.apiLoaderService.initClient()
},
err => {
this.apiFailed = true;
}
).then(result => {
this.apiReady = true;
}, err => {
this.apiFailed = true;
});
}
, gapi script .
<html>
<head>
<script src="https://apis.google.com/js/api.js"></script>
async defer, , Angular 2 , .
<html>
<head>
<script async defer src="https://apis.google.com/js/api.js"></script>
, , gapi /main-app/src/assests :
<html>
<head>
<script src="assets/api.js"></script>
. Google https://apis.google.com/js/api.js, . . //apis.google.com/js/ .