AngularJS + Google Spreadsheet
概要
這篇文章主要是說明如何寫 AngularJS 的 service,以類似$resource REST 的方式來取得 Google 試算表的資料。本文假設讀者已讀過 AngularJS Tutorial,了解 AngularJS 基本概念。
目錄
- 建立試算表
- Template
- App Module
- Service
- Controller
- 注意事項
- 參考
建立試算表
前往 https://drive.google.com 或是參考已經建立好的試算表。先建立一份新的試算表:
建立 > 試算表。填寫資料表,以 AngularJS Tutorial 的 phones.json 為例。
將試算表權限公開:
檔案 > 共用 > 擁有存取權的使用者 > 變更。共用設定 > 公開在網路上 > 存取權 > 可檢視 > 儲存。權限公開後,發佈到網路:
檔案 > 發佈到網路 > 內容有所變更時自動更新發佈 > 開始發佈。發佈完成後,公開連結中會提供一組 key,可以前往 Google Data APIs 測試看看資料是否回傳正確。
接下來進入正式寫程式的階段,這裡我們會使用到 Tabletop.js 這個第三方的 library,提供 javascript 快速取得 json 格式的試算表資料。
這裡會以 AngularJS Tutorial 的 phonecatApp 為例子,說明如何實作 Tabletop.js 的 service。
Template
建立index.html,並加入 angular.js,angular-route.js 和 tabletop.js。index.html:<!doctype html>
<html ng-app="phonecatApp">
...
<div ng-view></div>
...
<script src="angular.js"></script>
<script src="angular-route.js"></script>
<script src="tabletop.js"></script>
<script src="js/app.js"></script>
<script src="js/controllers.js"></script>
<script src="js/services.js"></script>
...
app.js,controller.js 和 services.js 後面會說明,接下來先加入 phone-list.html。partials/phone-list.html:<div>
<ul>
<li ng-repeat="phone in phones">
<img ng-src="{{phone.imageurl}}">
<p>{{phone.name}}</p>
<p>{{phone.snippet}}</p>
</li>
</ul>
</div>
phone-list.html 綁定了 name,snippet 和 imageurl 三個變數,對應試算表的欄位名稱。App Module
接著使用angular-route.js 提供的 ngRoute 來幫 app 設定路由,這裡先一律導向 /phones。js/app.js:var phonecatApp = angular.module('phonecatApp', [
'ngRoute',
'phonecatServices',
'phonecatControllers'
]);
phonecatApp.config(['$routeProvider',
function($routeProvider) {
$routeProvider.
when('/phones', {
templateUrl: 'partials/phone-list.html',
controller: 'PhoneListCtrl'
}).
otherwise({
redirectTo: '/phones'
});
}]);
接下來要開始寫 phonecatServices 和 phonecatControllers。Service
這裡將 tabletop.js 封裝成一個Phone 的 service,並自訂一個 query 方法提供試算表查詢使用。js/services.js:var phonecatServices = angular.module('phonecatServices', []);
phonecatServices.factory('Phone', ['$rootScope',
function($rootScope) {
return {
query: function(callback) {
Tabletop.init({
key: 'YOUR_KEY',
simpleSheet: true,
parseNumbers: true,
callback: function(data, tabletop) {
if(callback && typeof(callback) === "function") {
$rootScope.$apply(function() {
callback(data);
});
}
}
});
}
}
}]);
key 的部分記得填寫試算表提供的 key。Controller
最後剩下phonecatControllers,使用 Phone.query 取得試算表的 json 格式資料。js/controllers.js:var phonecatControllers = angular.module('phonecatControllers', []);
phonecatControllers.controller('PhoneListCtrl', ['$scope', 'Phone',
function($scope, Phone) {
Phone.query(function(data) {
$scope.phones = data;
});
}]);
...
完成,完整範例程式碼請參考 GitHub angular-spreadsheet-sample。注意事項
- 新版 Google 試算表不支援。
- 試算表欄位名稱只能小寫,例如:
imgUrl,要改成imgurl。







留言
張貼留言