1

如何在加載視圖和控制器之前從服務中獲取數據。我做這樣的如何在控制器加載之前加載數據?

resolve: { 
      getAlbum: function(albumService){ 
       return albumService.getAlbums(); 

     },getAtum: function(albumService){ 
       return albumService.getAtum(); 

     } 

    } 

我有一個服務這

.factory('albumService', ['$http', '$q'], 
    function albumService($http, $q) { 
     // interface 
     var service = { 
      albums: [], 
      getAlbums: getAlbums, 
      getAtum:getAtum 
     }; 
     return service; 

     // implementation 
     function getAlbums() { 
      var def = $q.defer(); 

      $http.get("data.json") 
       .success(function(data) { 
        service.albums = data; 
        def.resolve(data); 
       }) 
       .error(function() { 
        def.reject("Failed to get albums"); 
       }); 
      return def.promise; 
     } 

      function getAtum() { 
      var def = $q.defer(); 

      $http.get("data.json") 
       .success(function(data) { 
        service.albums = data; 
        def.resolve(data); 
       }) 
       .error(function() { 
        def.reject("Failed to get albums"); 
       }); 
      return def.promise; 
     } 
    }) 

我需要加載此控制器和視圖之前得到服務的數據。

.controller('PlaylistsCtrl', function($scope) { 
    $scope.playlists = [{ 
    title: 'Reggae', 
    id: 1 
    }, { 
    title: 'Chill', 
    id: 2 
    }, { 
    title: 'Dubstep', 
    id: 3 
    }, { 
    title: 'Indie', 
    id: 4 
    }, { 
    title: 'Rap', 
    id: 5 
    }, { 
    title: 'Cowbell', 
    id: 6 
    }]; 
}) 

我從兩個服務。我需要得到的數據顯示裝載機,直到我得到兩個service.I數據現在用它來顯示裝載機

http://ionicframework.com/docs/api/service/ $ ionicLoading/

Plunker http://plnkr.co/edit/4k7fliaYQx3teVH326cD?p=info

+0

$ http傳統承諾方法的成功和錯誤已被棄用。 https://docs.angularjs.org/api/ng/service/$http – FRECIA

+0

請提供plunker – user944513

+0

您的運動員缺少有效的cordova.js參考 – zszep

回答

4

resolve屬性在被解決後立即自動注入ui-router

.controller('PlaylistsCtrl', function(getAlbum, getAtum) { 
    // getAlbum and getAtum are resolved and ready to use 
}) 
  1. 我會用albumsatum代替getAlbumgetAtum,因爲它是數據本身。
  2. 錯誤地使用defer$http.get本身就是一個承諾。此外,successerror已棄用,請改爲使用then

    return $ http.get()。then();

最簡單jsbin

+0

其實我想在加載控制器和vew之前獲取數據。 – user944513

+0

請告訴如何使用解決方案而不是在控制器中使用 – user944513

+0

注入的「東西」來自'resolve'就是數據本身。爲什麼我建議你重命名它。 –

0

如果要在頁面上顯示加載微調器直到其解析。你可以做下面的事情。

resolve: { 
     apiData: "albumService", 
     itemDetailsData: function($q, apiData) { 
      console.log("Spinner on :") 
      var item = apiData.getAlbums(); 
      if (item) { 
      console.log("Spinner Off :") 
      return $q.when(item); 
      } else { 
      return $q.reject(); 
      } 
     } 
     } 

在您的控制器中,您可以注入itemDetailsData作爲依賴項。

希望這會有幫助

+0

可以請你給plunker – user944513

+0

@ user944513請檢查此更新Plunker http://plnkr.co/edit/iY0sCnM5dzvassz2k0KL?p=preview –

相關問題