Google Sheet API 在 Angular2/Ionic2 gapi.client.sheet
Google Sheet API in Angular2/Ionic2 gapi.client.sheet
我编写 Angular2/Ionic2 应用程序来显示 google sheet 的列表内容。使用 Google 登录工作正常,但 gapi.client.sheet 未定义。我应该怎么做才能解决它或者有方法代替?
我安装了
npm install --save @types/gapi
npm install --save @types/gapi.auth2
这是我的home.html
<ion-content>
<pre id="content"></pre>
<button ion-button id="authorize-button" (click)="handleAuthClick()">Authorize</button>
<button ion-button id="signout-button" (click)="handleSignoutClick()">Sign Out</button>
</ion-content>
这是我的 home.ts
import { Component, ViewChild} from '@angular/core';
import { AlertController, App, FabContainer, ItemSliding, List, ModalController, NavController, LoadingController } from 'ionic-angular';
@Component({
selector: 'page-home',
templateUrl: 'home.html'
})
export class TalentsPage {
@ViewChild('talentList', { read: List }) talentList: List;
constructor(
public alertCtrl: AlertController,
public app: App,
public loadingCtrl: LoadingController,
public modalCtrl: ModalController,
public navCtrl: NavController
) {}
ionViewWillEnter() {
this.app.setTitle('Talents');
this.updateList();
this.handleClientLoad();
}
handleClientLoad() {
gapi.load('client:auth2', this.initClient);
}
initClient() {
gapi.client.init({discoveryDocs: ["https://sheets.googleapis.com/$discovery/rest?version=v4"], clientId: 'xxxx.apps.googleusercontent.com', scope: "https://www.googleapis.com/auth/spreadsheets.readonly"
}).then(function () {
this.listMajors();
this.updateSigninStatus(gapi.auth2.getAuthInstance().isSignedIn.get());
});
}
updateSigninStatus(isSignedIn) {
if (isSignedIn) {
this.listMajors();
} else {
alert("doesnt sign in");
}
}
listMajors() {
gapi.client.sheets.spreadsheets.values.get({
spreadsheetId: 'xxxx',
range: 'All BP!A1:R16'
}).then(function(response) {
var range = response.result;
if (range.values.length > 0) {
this.appendPre('Name, Major:');
for (let i = 0; i < range.values.length; i++) {
var row = range.values[i];
// Print columns A and E, which correspond to indices 0 and 4.
this.appendPre(row[0] + ', ' + row[4]);
}
} else {
this.appendPre('No data found.');
}
}, function(response) {
this.appendPre('Error: ' + response.result.error.message);
});
}
appendPre(message) {
var pre = document.getElementById('content');
var textContent = document.createTextNode(message + '\n');
pre.appendChild(textContent);
}
handleAuthClick(event) {
alert("signin");
gapi.auth2.getAuthInstance().signIn();
this.listMajors();
}
handleSignoutClick(event) {
alert("signout");
gapi.auth2.getAuthInstance().signOut();
}
}
我需要将这个放在我的 .ts 文件中
declare var gapi: any;
我编写 Angular2/Ionic2 应用程序来显示 google sheet 的列表内容。使用 Google 登录工作正常,但 gapi.client.sheet 未定义。我应该怎么做才能解决它或者有方法代替?
我安装了
npm install --save @types/gapi
npm install --save @types/gapi.auth2
这是我的home.html
<ion-content>
<pre id="content"></pre>
<button ion-button id="authorize-button" (click)="handleAuthClick()">Authorize</button>
<button ion-button id="signout-button" (click)="handleSignoutClick()">Sign Out</button>
</ion-content>
这是我的 home.ts
import { Component, ViewChild} from '@angular/core';
import { AlertController, App, FabContainer, ItemSliding, List, ModalController, NavController, LoadingController } from 'ionic-angular';
@Component({
selector: 'page-home',
templateUrl: 'home.html'
})
export class TalentsPage {
@ViewChild('talentList', { read: List }) talentList: List;
constructor(
public alertCtrl: AlertController,
public app: App,
public loadingCtrl: LoadingController,
public modalCtrl: ModalController,
public navCtrl: NavController
) {}
ionViewWillEnter() {
this.app.setTitle('Talents');
this.updateList();
this.handleClientLoad();
}
handleClientLoad() {
gapi.load('client:auth2', this.initClient);
}
initClient() {
gapi.client.init({discoveryDocs: ["https://sheets.googleapis.com/$discovery/rest?version=v4"], clientId: 'xxxx.apps.googleusercontent.com', scope: "https://www.googleapis.com/auth/spreadsheets.readonly"
}).then(function () {
this.listMajors();
this.updateSigninStatus(gapi.auth2.getAuthInstance().isSignedIn.get());
});
}
updateSigninStatus(isSignedIn) {
if (isSignedIn) {
this.listMajors();
} else {
alert("doesnt sign in");
}
}
listMajors() {
gapi.client.sheets.spreadsheets.values.get({
spreadsheetId: 'xxxx',
range: 'All BP!A1:R16'
}).then(function(response) {
var range = response.result;
if (range.values.length > 0) {
this.appendPre('Name, Major:');
for (let i = 0; i < range.values.length; i++) {
var row = range.values[i];
// Print columns A and E, which correspond to indices 0 and 4.
this.appendPre(row[0] + ', ' + row[4]);
}
} else {
this.appendPre('No data found.');
}
}, function(response) {
this.appendPre('Error: ' + response.result.error.message);
});
}
appendPre(message) {
var pre = document.getElementById('content');
var textContent = document.createTextNode(message + '\n');
pre.appendChild(textContent);
}
handleAuthClick(event) {
alert("signin");
gapi.auth2.getAuthInstance().signIn();
this.listMajors();
}
handleSignoutClick(event) {
alert("signout");
gapi.auth2.getAuthInstance().signOut();
}
}
我需要将这个放在我的 .ts 文件中
declare var gapi: any;