Аргументы не проходят через мой сервис между контроллерами

0

Вот моя услуга:

var MyService= function () {
    var filters, charts, subscription;

    return {
        getFilters: function () {
            return this.filters;
        },
        setFilters: function (value) {
            this.filters = value;
        },
        getCharts: function () {
           return this.charts;
        },
        setCharts: function (value) {
           this.charts = value;
        },
        getSubscription: function () {
           return this.subscription;
        },
        setSubscription: function (value) {
           this.subscription = value;
        }
    };
};

angular.module('Something').factory('MyService', MyService);

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

Контроллер A имеет функцию, которая вызывается, когда пользователь выбирает ссылку; функция устанавливает мой элемент в мою службу и использует окно для перенаправления на другую страницу.

$scope.pressedButton = function (subscription) {
   MyService.setSubscription(subscription);
   $window.location.href = 'newPage.html';
}

Контроллер B для newPage.html должен иметь возможность читать и console.log из myItem из моей службы, однако он говорит, что он не определен.

console.log(MyService.getSubscription()) == undefined.

Кто-нибудь знает, почему? Я использую сеттеры и геттеры, но поскольку я немного ограничен моей маршрутизацией ($ window вместо ui-router или ng-router), мне кажется, что переход на новую страницу - это то, что очищает мой сервис.,

Теги:
controllers

2 ответа

0

Я лично предпочитаю синтаксис модели $factory данных $factory, так как он дает вам псевдо-частные переменные и единую точку доступа для всех этих данных. Это упрощает проверку вашего кода и менее вероятно, что он получит искаженные данные.

Кроме того, если вы собираетесь прокладывать маршрут таким образом, я бы рекомендовал ui-router.

В отдельной службе, где вы делаете set/get, включайте $state и просто вводите этот файл шаблона в свое представление.

Но синтаксис мудрый, @alwang85 правильный. : +1:

  • 0
    Я использую фабрику (я думаю) ... да, я бы хотел использовать ui-router, но проект был построен до того, как я попытался добавить в ui-router больше работы, чем хотелось бы. Можете ли вы объяснить часть $ state немного подробнее? Приведи пример может быть?
0

Я считаю, что у вас может быть синтаксис замещения фабрик и сервисов.

myApp.factory('sample', function(){
  var obj = {
    item: ''
  }
  return {
    getItem: function () {
      return obj.item;
    },
    setItem: function (value) {
      obj.item= value;
    }
  }
}

против службы

myApp.service('sample', function(){
  var _item = '';
  this.getItem = function () {
      return _item;
    };
  this.setItem = function (value) {
      _item = value;
    }
}
  • 0
    Просто посмотрел на мой код, и да, он должен быть фабричным, так как я использую angular.module ('что-то'). Factory ('MyService', MyService). Но это ничего не решает ... код по-прежнему не отображается в новом контроллере.
  • 0
    Когда фабрика инициируется, значения постоянны, поэтому вы больше не можете изменять переменные внутри фабрики. В моем примере показан экземпляр объекта, поэтому вы будете изменять только ссылочное значение с помощью моих фабричных методов. В вашем примере переменные всегда будут неопределенными, как инициированные при загрузке. Если вы думаете о сервисе как aJavascript
Показать ещё 1 комментарий

Ещё вопросы

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