Передача var между двумя контроллерами через сервис в Angular?

0

У меня есть два контроллера:

.controller('DashCtrl', function($scope, GCs, GCDetails ) {
    $scope.getData = function(id)
    {
        GCs.get(id)
        .success(function(data){
            console.log(data); // it is getting the data correctly here.

            // I want to pass the data to 'GCDetailCtrl' controller
            GCDetails = data;
        });
    };
})

.controller('GCDetailCtrl', function($scope, GCs) {
     console.log(GCDetails); // I am getting an empty object
     $scope.itemDetails = GCDetails; //nothing in it
})

Я пробовал много методов и видел много потоков в stackoverflow, но я не мог понять, в чем проблема.

Мой сервис выглядит следующим образом:

.service('GCDetails', function () {
    return {};
});

Я чувствую, что мое обслуживание неверно, потому что я всегда возвращаю пустой объект. любая помощь, пожалуйста? Благодарю.

Теги:

4 ответа

0

Неправильно использовать http-звонки от контроллеров. Вы можете заставить службу возвратить функцию с вашим HTTP-вызовом. Я бы предложил следующее:

app.factory('GCdetails', function($http){
    return {
        data:{},
        setData:function(data){
          this.data=data;
        },
        get : function(params){
            return $http.get(id, {
                params : params
            });
        }
    }
});

А теперь из контроллеров обновите данные:

app.controller('DashCtrl',function($scope,GCdetails){
    GCdetails.get().success(function(data){
      GCdetails.setData(data);
    });
});

app.controller('GCdetailsController',function($scope,GCdetails){
    $scope.itemDetails=GCdetails.data;
});

Надеюсь, это поможет.

0

Это должно работать, и я всегда использую услуги для передачи данных:

.service('GCDetails', function() {

  var myObj = {};

  this.setObject = function (val) {
    myObj = val;
  };

  this.getObject = function() {
    return myObj;
  };
});

Также в вашем контроллере убедитесь, что вы вызываете GCDetails.setObject(yourvalue) с вашего контроллера, чтобы он действительно имел значение при вызове GCDetails.getObject().

  • 0
    Я попробую..
  • 0
    @Riad Прежде чем пытаться получить данные, убедитесь, что вы действительно установили значение из контроллера.
0

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

поэтому он должен выглядеть примерно так

.service('GCDetails', function(){
  var self = this;
  self.myObject = {};

  self.setObject = function (val) {
    self.myObject = val;
  };

  self.getObject = function() {
    return self.myObject;
  };
});

почему я назначил это себе? чтобы избежать столкновения, когда вы вызываете getObject или setObject, он не знает, к какому я вам звоню.

  • 0
    Это не работает
  • 0
    Я ничего не менял в своем контроллере. Я просто изменил услугу, как вы предложили
Показать ещё 1 комментарий
0

Вы не назначаете значение в сервисе. Вам необходимо сохранить ответ ajax в службе, а затем вызвать его на другом контроллере. Сделайте это внизу

.controller('DashCtrl', function($scope, GCs, GCDetails ) {
    $scope.getData = function(id)
    {
        GCs.get(id)
        .then(function(data){
            console.log(data); // it is getting the data correctly here.

            // I want to pass the data to 'GCDetailCtrl' controller
            GCDetails.myObject = data; // assign data in service object
        });
    };
})

И ваше обслуживание должно быть

.service('GCDetails', function () {
    this.myObject = {};
    var self = this; 
    this.callAFunction = function() {
       return self.myObject ;
    };
 });

И используйте этот объект службы, где хотите, как показано ниже.

.controller('GCDetailCtrl', function($scope, GCs, GCDetails) {
     $scope.itemDetails = GCDetails.callAFunction();
     console.log($scope.itemDetails); //You will get the data
})
  • 0
    Я это дает мне синтаксическую ошибку в службе
  • 0
    проверить отредактированный ответ
Показать ещё 8 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню