2

Я пытаюсь использовать решительность $ stateProvider с заводом я создалугловых щий маршрутная решительность с angularJS заводом

по какой-то причине, обещание от фабрики пустого объект

но когда я регистрируйте данные из вызова $ http, я получаю данные из моего .json-файла

любая идея, почему мой дефер.произведение - пустой объект?

playlistsService.js

(function() { 
 
    'use strict'; 
 

 
    angular 
 
     .module('app.core') 
 
     .factory('playlistsService', playlistsService); 
 

 
    playlistsService.$inject = ['$http', '$q']; 
 

 
    /* @ngInject */ 
 
    function playlistsService($http, $q) { 
 
     var service = { 
 
      loadPlaylists : loadPlaylists 
 
     }; 
 

 
     return service; 
 

 
     //////////////// 
 

 
     function loadPlaylists() { 
 
      var defer = $q.defer(); 
 
      $http.get('data/playlists.json') 
 
       .success(function (data) { 
 
        console.log('json data: ' + angular.toJson(data)); 
 
        defer.resolve(data); 
 
       }); 
 
      console.log('defer.promise: ' + angular.toJson(defer.promise)); 
 
      return defer.promise; 
 
     } 
 
    } 
 

 
})();

playlists.js

(function() { 
 
    'use strict'; 
 

 
    angular 
 
     .module('app.playlists') 
 
     .config(stateProvider) 
 
     .controller('Playlists', Playlists); 
 

 
    stateProvider.$inject = ['$stateProvider']; 
 
    Playlists.$inject = ['playlistsService']; 
 

 
    /* @ngInject */ 
 
    function stateProvider($stateProvider){ 
 
     $stateProvider 
 
      .state('app.playlists', { 
 
       url: '/playlists', 
 
       views: { 
 
        'menuContent': { 
 
         templateUrl: 'app/playlists/playlists.html', 
 
         controller: 'Playlists as vm', 
 
         resolve: { 
 
          playlists: function(playlistsService){ 
 
           return playlistsService.loadPlaylists(); 
 
          } 
 
         } 
 
        } 
 
       } 
 
      }) 
 
    } 
 

 
    /* @ngInject */ 
 
    function Playlists(playlists) { 
 
     /* jshint validthis: true */ 
 
     var vm = this; 
 

 
     vm.activate = activate; 
 
     vm.title = 'Playlists'; 
 
     vm.playlists = playlists; 
 

 
     activate(); 
 

 
     //////////////// 
 

 
     function activate() { 
 
      console.log('playlists object: ' + angular.toJson(vm.playlists)) 
 
      console.log('playlists from service: ' + angular.toJson(playlists)) 
 
     } 
 

 

 
    } 
 

 
})();

ответ

2

Ваш Playlists контроллер должно быть $injectplaylists обещание, которое было создано в функции разрешения вместо playlistsService, сделает трюк.

Playlists.$inject = ['playlists']; 

Update

Вы можете также использовать обещание, созданное $http.get вместо создания пользовательского обещания.

Сервис

function loadPlaylists() { 
    return $http.get('data/playlists.json') 
    .then(function (data) { 
     console.log('json data: ' + angular.toJson(data)); 
     return data; 
    }); 
} 

Resolve

resolve: { 
    playlists: function(playlistsService){ 
     return playlistsService.loadPlaylists(); 
    } 
} 
+0

Поскольку я использую в решительность .state, нужно ли мне разрешить данные HTTP $ в моей фабрике? –

+0

@DerekHannah yes..otherwise вы можете вернуть обещание $ http.post. Позвольте мне обновить ответ –

Смежные вопросы