Стойност на съхранението на Angular за обслужване за достъп до множество страници

РЕШЕНИЕ: Изглежда, че функцията ми .get() се е извикала, преди да мога да актуализирам променливата „something“ и следователно не показва актуализираната променлива.

Когато го тествах на истинската страница, работи като чар :)

окончателен FIDDLE

забележка: Добавих връщане към функцията set за незабавно актуализиране на изгледа.


АКТУАЛИЗАЦИЯ: моята фабрика работи добре, но не мога да получа стойността, обвързана с фабричната функция .set(). FIDDLE


Създавам ръководство за инсталиране на 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