Угловое совместное имущество от неработающей услуги

Вопрос:

Plunkr

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

angular.module('app', []).
service('sharedProperties', function () {
var list_name = '';

return {
getListName: function() {
return list_name;
},
setListName: function(name) {
list_name = name;
}
};
});

У меня два контроллера. В первом я задал значение list_name. Во-вторых, я хочу повторить эту информацию.

Вот как определяются мои контроллеры:

function ListCtrl($scope, $http, sharedProperties) {
...
$scope.changeListName = function(list_name) {
sharedProperties.setListName(list_name);
console.log(list_name, sharedProperties.getListName());    # shows ( 'metro', 'metro')  == metro being a dummy list_name
...
};

function ItemCtrl($scope, $http, sharedProperties) {
...
$scope.showOnlyList = sharedProperties.getListName();
console.log(this.sharedProperties.getListName());           # empty string
...
};

Я зарегистрировал переменную и проверил ее в консоли браузера и заметил, что ListCtrl правильно устанавливает общее свойство. Проблема исходит от контроллера ItemCtrl. Кажется, что когда я пытаюсь получить доступ к списку_имя с sharedProperties.getListName(); , свойство пусто, или функция возвращает пустую строку.

ОБНОВИТЬ

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

Я получил следующий код:

В ListCtrl:

$scope.changeListName = function(list_name) {
Lungo.Data.Cache.set("ListName", list_name);
console.log('LIST', Lungo.Data.Cache.get("ListName"));
};

В ItemCtrl:

$scope.showOnlyList = Lungo.Data.Cache.get("ListName");
console.log('ITEM', Lungo.Data.Cache.get("ListName"));

Журнал ListCtrl показывает, что кеш установлен в правильное имя_ list_name. Однако консоль для ItemCtrl показывает, что Lungo.Data.Cache.get("ListName") не определено, даже если оно было правильно в ListCtrl!

Я также попытался заменить хранилище локальным хранилищем HTML5 без успеха…

Лучший ответ:

Ну, я думаю, это потому, что вы мгновенно заносили свой файл sharedListPropery в консоль сразу после создания экземпляра ItemCtrl. Когда он создается, sharedPropertyList еще не имеет значения.

EDIT: Sry, JSFiddle в настоящее время не работает, поэтому я должен поставить этот непроверенный код здесь. Но это должно дать вам идею

angular.module('app', []).
service('sharedProperties', function () {
  var list_name = '';

  return {
      getListName: function() {
          return list_name;
      },
      setListName: function(name) {
        list_name = name;
      }
  };
}).
controller('ListCtrl',['$scope','sharedProperties',function(scope,shared){
  console.log(shared.getListName()); //empty, because nothing set yet.
  scope.listname = shared.getListName();
  //watching the change and updating the shared
  scope.$watch('listname',function(value){
    console.log('listname is now '+value);
    shared.setListName(value); 
  })
  //watching the shared directly
  scope.shared=shared;
  scope.$watch('shared.getListName()',function(value){
      console.log("sharedProperty has changed to"+value);
  })

}]);

Оцените статью
TechArks.Ru
Добавить комментарий