Значение хранилища Angular для обслуживания доступа к нескольким страницам

РЕШЕНИЕ: казалось, что моя функция .get() была вызвана до того, как я смог обновить переменную «что-то», и поэтому она не отображала обновленную переменную.

Когда я проверил это на реальной странице, это сработало как шарм :)

окончательный FIDDLE

примечание: я добавил возврат к функции набора, чтобы немедленно обновить представление.


ОБНОВЛЕНИЕ: мой factory работает нормально, но не может получить значение, привязанное к функции factory .set(). СКРИПКА


Я создаю руководство по установке сетевого USB-разъема, и мне нужно сохранить некоторые переменные, чтобы отображать правильный контент на нескольких страницах (жестко в пределах одного и того же контроллера).

После некоторых исследований кажется, что «услуги» - правильный способ сделать это, однако я не могу заставить их работать.

Это работает, когда я помещаю функцию внутрь самого контроллера, но она снова сбрасывается на «[]», когда я меняю страницу.

функция внутри контроллера, как у меня сейчас:

$scope.isActiveSystem = [];

$scope.activeSystem = function(name) {
    $scope.isActiveSystem = name.value;
}

Может ли кто-нибудь указать мне правильное направление, как поместить это в службу, или дать мне пример для изучения, чтобы я мог лучше понять, что происходит?

Кроме того, должен ли я хранить свои данные на фабрике или в каком-либо сервисе?

Моя попытка создать сервис: FIDDLE


person Noel Heesen    schedule 17.04.2015    source источник


Ответы (2)


Вы недалеки от решения.

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

app.factory('dmFactory', function() {
//name.value should equal to system.value from the controller 
var somethingIWantToRemember = {};
return {
   set: set,
   get: get
}

function get(key){      //You can forget about the key if you want
    return somethingIWantToRemember[key];
}

function set(key, value){
    somethingIWantToRemember[key] = value;
}

});

и в вашем контроллере вам просто нужно вызвать обе функции таким образом:

$scope.something = dmFactory.get(key);

or

dmFactory.set(key, $scope.something);
person Deblaton Jean-Philippe    schedule 17.04.2015
comment
Дошло до отображения статического текста при вводе в dmFactory.set(); Все еще не могу ввести .set(somevalue), который должен быть установлен по щелчку. FIDDLE - person Noel Heesen; 18.04.2015

С вашего контроллера, если вы сбрасываете его при загрузке страницы, это нормально, что ваши данные сбрасываются.

Вам необходимо: - внедрить свой сервис в ваш контроллер

app.controller('myCtrl',['myService',function(myService){
  
  }]);

  • создайте функцию получения из вашего сервиса, чтобы получить значение переменной

factory.getVal = function(){
  return val;  
};

  • вызовите функцию get при запуске вашего контроллера как

$scope.isActiveSystem = myService.getVal();

person aorfevre    schedule 17.04.2015
comment
Также не забудьте поставить сеттер в службу. - person BobDoleForPresident; 17.04.2015