2015-11-24 75 views
0

對不起,有一個非常愚蠢的問題,但我剛開始使用AngularJS和OnsenUI。初始化AngularJS服務 - 文檔加載工廠

我有一個服務從SQLite的獲取數據:

module.factory('$update', function() { 
    var update = {}; 
    db.transaction(function (tx) { 
     tx.executeSql('SELECT * FROM event_updates', [], function (tx, results) { 
      var rows = results.rows; 
      update.items = []; 
      if (!rows.length) {} else { 
       for (var index = 0; index < rows.length; index++) { 
        update.items.push({ 
          "title": rows.item(index).title, 
          "date": rows.item(index).date, 
          "desc": rows.item(index).desc 
        }); 
       } 
      } 
     }, function (error) { 
      console.log(error); 
     }); 
    }); 
    return update; 
}); 

和使用數據的控制器:只要我的頁面加載內容

module.controller('UpdatesController', function ($scope, $update) { 
    $scope.items = $update.items; 
}); 

不顯示,我需要點擊兩次以下面的代碼來調用頁面看到的內容:

<ons-list ng-controller="UpdatesController"> 
         <ons-list-item modifier="chevron" class="list-item-container" ng-repeat="item in items" ng-click="showUpdate($index)"> 
          <div class="list-item-left"> 

          </div> 
          <div class="list-item-right"> 
           <div class="list-item-content"> 
            <div class="name">{{item.title}}</div> <span class="desc">{{item.desc}}</span> 

           </div> 
          </div> 
         </ons-list-item> 
</ons-list> 

Can an an ybody幫助我如何在頁面加載完所有內容後立即初始化控制器。對不起,如果這是一個愚蠢的問題,但我真的很掙扎。非常感謝你的幫助。

回答

1

您可以將請求的結果存儲在工廠中,然後檢索它們。

module.factory('$update', function() { 
    var update = {}; 
    var requestValues = function(){ // store the results of the request in 'update' 
    // Your db.transaction function here 
    } 

    var getUpdates = function(){ // retrieve the values from 'update' 
    return update; 
    } 

    return{ 
    requestValues : requestValues, 
    getUpdates : getUpdates 
    } 
}); 

然後在你的控制器:

module.controller('UpdatesController', function ($scope, $update) { 
    $update.requestValues(); 
    $scope.items = $update.getUpdates(); 
}); 

然後,您可以得到(通過使用$update.getUpdates)從您的解決方案的任何地方的值,而無需進行額外的http請求。

+0

謝謝。我有一個錯誤:**期望一個賦值或函數調用,而是在這一行看到一個表達式**:$ update.requestValues;不幸的是,當頁面加載後,它不會加載內容,必須點擊兩次才能看到內容。 – qqruza

+0

對不起,忘記把它們稱爲函數'()'。 Se更新了答案 – sjokkogutten