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 –

相关问题