2014-09-18 29 views
0

我試圖獲取存儲在parse.com集合中的數據。我使用的解析的Javascript SDK調用服務異步如下:如何從parse.com獲取數據並使用AngularJs將其呈現給表

ctrl.factory('TLDs', function($q){ 

    var query = new Parse.Query(Fahras)// Fahras is the Parse Object initialized earlier in code 
    query.equalTo("type", "Domain") 
    var myCollection = query.collection() 

    return { 
     fetchDomains: function(){ 
      var defer = $q.defer(); 

      myCollection.fetch({ 
       success : function(results) { 
        defer.resolve(results.modles); 
        console.info(results.models) 
       }, 
       error : function(aError) { 
        defer.reject(aError); 
       } 
      }); 
      console.info(defer.promise) 
      return defer.promise; 

     } 
    } 
}) // end of factory topDomains 

我有一個簡單的表來顯示所獲取的數據

<div id="showdomainshere"> {{domains}}</div> 

    <table id="domains_table" class="table table-hover"> 
     <thead> 
     <tr> 
      <th>Domain</th> 
      <th>Code</th> 
      <th>Subjects</th> 
      <th>Instances</th> 
     </tr> 
     </thead> 
     <tbody id="table_body"> 
     <form id="edit_row" class="form-inline"> 

       <tr ng-repeat="item in domains"> 
        <td><span>{{item.attributes.arTitle}}</span> 
        </td> 

        <td><span>{{item.attributes.domainCode}}</span> 
        </td> 

        <td><span>{{subclasses}}</span>  
        </td> 

        <td><span>{{instances}}</span> 
        </td> 
       </tr> 

     </form> 

     </tbody> 
    </table> 

</div> <!-- end of main div --> 

和協議下的控制器我是個使用渲染視圖:

ctrl.controller('Home', ['$scope','TLDs',function($scope, TLDs) { 

    $scope.domains = TLDs.fetchDomains() 


}]) 

使用console.info我可以看到結果被提取,我可以通過預期返回的模型數組。問題在於$ scope.domains從未更新過,因此表格從未被渲染過。

+0

幸好我自己看着辦吧 – 2014-09-19 06:25:57

回答

0

幸運的是我能夠弄明白。

控制器應該是這樣的:

ctrl.controller('Home', ['$scope','TLDs',function($scope, TLDs) { 
    TLDs.fetchDomains().then(function(data){ 
     $scope.domains = data 
    }) 
} 

而工廠本身應該是這樣的:

ctrl.factory('TLDs', function($q){ 
    var query = new Parse.Query(Fahras) 
    query.equalTo("type", "Domain") 
    var myCollection = query.collection() 

    return { 
     fetchDomains: function(){ 
      var defer = $q.defer(); 

      myCollection.fetch({ 
       success : function(results) { 
        defer.resolve(results.models) 
        return results.models 
       }, 
       error : function(aError) { 
        defer.reject(aError) 
       } 
      }) 

      return defer.promise; 

     } 
    } }) // end of factory 
+0

你有興趣在一個替代解決方案作爲另一個答案? (順便說一句,你沒有問題,有人可能會認爲它受到延遲反模式的影響,但是由於承諾的解析行爲是怎樣的,它們不是消化週期的一部分 - 我明白你爲什麼想要去做這個) – 2014-09-19 09:19:05

相關問題