2016-01-07 54 views
0

如何將服務中的值傳遞給控制器​​?我一直在閱讀有關這個​​問題的stackoverflow問題,並沒有任何解決方案似乎解決了我的問題。我試圖用tabletop.js訪問谷歌的電子表格時,我從服務CONSOLE.LOG不過,我可以看到的值,當我嘗試從控制器我收到以下錯誤訪問電子表格值:chartService.getProperty不是一個函數如何在服務和控制器之間傳遞值

獲取電子表格URL的代碼工作正常。用get方法。不知道我在這裏做錯了什麼。

控制器

angular.module('myapp') 
    .controller('piechartCtrl', function (chartService, $scope, config) { 
    $scope.values = chartService.getProperty(); 

    }); 

Service.js

angular.module('myapp') 
.service('chartService', function(){ 
    return { 
    getUrl: function init(path) { 
     Tabletop.init({ key: path, 
         callback: showInfo, 
         simpleSheet: true }) 
    } 
    } 

function showInfo(data, tabletop) { 
    return{ 
     getProperty: function(){ 
     return data 
     }, 
     setProperty: function(value){ 
     data = value; 
     } 

    } 
    } 
}); 
+3

你還沒有在你從'chartService'返回的對象字面上定義'getProperty'方法嗎?你在'Tabletop.init'方法中指定了一個'callback'參數,這讓我認爲你無法返回它,它可能會返回一個承諾或其他東西。 –

+0

檢查這個答案[這裏](http://stackoverflow.com/questions/34681319/how-to-setup-service-to-pass-google-sheet-ids-angularjs/34792979#34792979) – puemos

回答

0

這是您的服務,我看你回來的唯一事情是使用getURL。所以你可以從控制器訪問的唯一東西是chartService.getUrl函數。

service('chartService', function() 
{ 
    return 
    { 
     getUrl: function init(path) 
     { 
      Tabletop.init({ 
       key: path, 
       callback: showInfo, 
       simpleSheet: true 
      }) 
     } 
    } 

    function showInfo(data, tabletop) 
    { 
     return 
     { 
      getProperty: function() 
      { 
       return data 
      }, 
      setProperty: function (value) 
      { 
       data = value; 
      }  
     } 
    } 
}); 

得到它的工作,雖然我不認爲這是理想的解決方案應該工作...

service('chartService', function() 
{ 
    var returnObject = 
    { 
     getUrl: function init(path) 
     { 
      Tabletop.init({ 
       key: path, 
       callback: showInfo, 
       simpleSheet: true 
      }) 
     }, 
     resultValue: {} 
    } 

    function showInfo(data, tabletop) 
    { 
     return 
     { 
      getProperty: function() 
      { 
       return data 
      }, 
      setProperty: function (value) 
      { 
       data = value; 
       returnObject.resultValue = value; 
      }  
     } 
    } 

    return returnObject 
}); 

然後用chartService.resultValue替換chartService.getProperty()雖然這絕不是同步的。

+0

不幸的是這將返回空的對象。 – Imo

相關問題