我正在构建一个使用angular的小部件,它使用用户给出的Google Sheet Ids并以漂亮的json格式发布输出.问题是我的代码什么也没做.控制台中没有错误,当我添加ID时没有任何反应
我想问题出在service.js中
- angular.module('adf.widget.charts')
- .service('chartService',function(){
- return {
- getUrl: function(key){
- var googleSheetkey = key
- }
- }
- return googleSheetkey
- });
edit.html(添加工作表ID)
- <form role="form">
- <div class="form-group">
- <label for="sample">Sample</label>
- <input type="text" class="form-control" id="sample" ng-model="config.googleSheetkey" placeholder="Enter path">
- </div>
- </form>
App.js
- angular.module('adf.widget.charts',['adf.provider','nvd3'])
- .config(function(dashboardProvider){
- var widget = {
- templateUrl: '{widgetsPath}/charts/src/view.html',reload: true,resolve: {
- /* @ngInject */
- urls: function(chartService,config){
- if (config.key){
- return chartService.getUrl(config.googleSheetkey);
- }
- }
- },edit: {
- templateUrl: '{widgetsPath}/charts/src/edit.html'
- }
- };
- dashboardProvider
- .widget('piechart',angular.extend({
- title: 'Custom Piechart',description: 'Creates custom Piechart with Google Sheets',controller: 'piechartCtrl'
- },widget));
- });
调节器
- angular.module('adf.widget.charts')
- .controller('piechartCtrl',function (chartService,$scope) {
- window.onload = function() { init() };
- function init() {
- Tabletop.init( { key: chartService.googleSheetkey,callback: function(data,tabletop) { console.log(data) },simpleSheet: true } )
- }
- });
解决方法
工作示例
here
示例路径:
https://docs.google.com/spreadsheet/pub?hl=en_US\u0026amp;hl=en_US\u0026amp;key=0AmYzu_s7QHsmdDNZUzRlYldnWTZCLXdrMXlYQzVxSFE\u0026amp;output=html
最好的方式是与Promise
使用q框架($q服务)
从控制器中删除逻辑到服务
应用
- angular.module('myApp',[]);
服务
- angular.module("myApp")
- .service("chartService",function($q) {
- return {
- getSpreadsheet: function init(path) {
- var deferred = $q.defer();
- //if no path use the config key
- Tabletop.init({
- key: path,callback: deferred.resolve,simpleSheet: true
- });
- return deferred.promise;
- }
- }
- });
调节器
- angular.module('myApp')
- .controller('piechartCtrl',['$scope','chartService',function($scope,chartService) {
- $scope.getSheet = function() {
- chartService.getSpreadsheet($scope.googleSheetPath).then(function(data) {
- $scope.data = data;
- })
- }
- }]);
的index.html
- <!DOCTYPE html>
- <html ng-app="myApp">
- <head>
- <link rel="stylesheet" href="style.css">
- <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.5/angular.min.js"></script>
- <script src="tabletop.js"></script>
- <script src="script.js"></script>
- </head>
- <body ng-controller="piechartCtrl">
- <form role="form" ng-submit="getSheet()">
- <div class="form-group">
- <label for="sample">Sample</label>
- <input type="text" class="form-control" id="sample" ng-model="googleSheetPath" placeholder="Enter path">
- <input type="submit" id="submit" value="Submit" />
- </div>
- </form>
- <div>
- {{data}}
- </div>
- </body>
- </html>