Установите данные службы Angularjs в переменную контроллера

Я пытаюсь установить переменную области действия контроллера в данные, но безуспешно. В console.log в контроллере указано значение undefined. Цените помощь!

Мой угловой сервис имеет следующий код:

service('VyrtEventService', ['$http', function($http) {
  var events = [];

  this.getArtistEvents = function(artistId) {
    var url = '/api/users/' + artistId + '/';

    var promise = $http.get(url).success(function(data, status, headers, config) {
      events = data.artist.events;
      console.log(events);
      return events;
    }).catch(function(error) {
      status = 'Unable to load artist data: ' + error.message;
      console.log(status);
    });

    return promise;
  };
}]);

И я ссылаюсь на него в контроллере следующим образом:

VyrtEventService.getArtistEvents($scope.artistId).then(function(data){
    $scope.events = data.data.artist.events;
});

console.log($scope.events);

person Yasir    schedule 20.07.2015    source источник
comment
Можете показать код контроллера?   -  person Chander .k    schedule 20.07.2015
comment
контроллер('VyrtEventCtrl', ['$scope', 'VyrtEventService', function($scope, VyrtEventService) { $scope.artist; $scope.events; $scope.active_event_id; $scope.status; VyrtEventService.getArtistEvents($scope .artistId).then(function(data){ $scope.events = data.data.artist.events; }); console.log($scope.events); }]);   -  person Yasir    schedule 20.07.2015
comment
Сначала попробуйте назначить $scope.events=[]; в объявлении $scope.events = data.data.artist.events;, убедитесь, что вы получаете список в data.data.artist.events;   -  person Chander .k    schedule 20.07.2015
comment
не повезло, data.data утешает правильно, но $scope.events не устанавливается на это   -  person Yasir    schedule 20.07.2015
comment
Вы получаете какую-либо ошибку в консоли?   -  person Chander .k    schedule 20.07.2015
comment
Когда вы делаете console.log($scope.events), это будет undefined, потому что ваше обещание VyrtEventService.getArtistEvents еще не разрешено. Поместите свой console.log внутри обратного вызова, где вы установили $scope.events   -  person kevin    schedule 20.07.2015
comment
спасибо user2341, это работает для меня. однако есть ли способ установить его в область действия и использовать вне функции .then? я намерен использовать его в разных местах контроллера, если это возможно   -  person Yasir    schedule 20.07.2015
comment
Оказывается, хотя console.log переменной области действия показывает undefined, на самом деле она устанавливается, поскольку я извлекаю переменные области действия в директиве, и она показывает значения просто отлично.   -  person Yasir    schedule 20.07.2015
comment
это мое непонимание, но, возможно, console.log происходит до того, как переменная фактически установлена?   -  person Yasir    schedule 20.07.2015


Ответы (2)


Вы должны просто установить $scope.events = data в своем контроллере, потому что ваше обещание уже возвращает data.artist.events, когда оно разрешается

person kevin    schedule 20.07.2015
comment
неудачно. data.data.artist.events дает мне что-то, но присвоение его $scope.events не дает. - person Yasir; 20.07.2015

Чтобы передать область действия службе из любого места в контроллере. Убедитесь, что вы вводите сервис.

controllersModule.controller('MyCtrl', function($scope, $filter, $http, $compile, ngTableParams, **FactoryYouwant**) 
    {

        **FactoryYouwant**.getdata($scope.**scopeYoutwantTopass**).then (function(responseData){    
        var ResponseFromServer =responseData.data;
    }

in service

    controllersModule.factory('**FactoryYouwant**, function($http) {
        var responseData = null;

        return {
            getdata : function(**data**){     (you dont have to use $)                  
                responseData = $http.post or whatever actually gets you data;
                return responseData;
            }

          };
    });

Я надеюсь, что это поможет вам вызвать получение данных из службы в любом месте контроллера.

person teksan    schedule 20.07.2015