Директивная область видимости не получает обновления в angularjs

0

Я указал контроллер в директиве. Я выполняю операцию добавления и удаления в списке данных. Но когда я добавляю данные в список, глобальная переменная области не получает обновления. Я использую службу для получения данных. Мой сервис//служба углового хранения

var storageService = angular.module('storageService', [])
    .service('storage', function(){

    var todoKey = "todo_data";

    this.getTodos = function(){
        todolist = (localStorage.getItem(todoKey)!==null)?JSON.parse(localStorage.getItem(todoKey)) : [];
        return todolist     
        }
    this.addTodo = function(taskName){
        console.log("storage"+ taskName.text);
        todoList = this.getTodos()
        console.log(todoList);
        todoList.push(taskName);
        console.log(todoList);
        localStorage.setItem(todoKey, JSON.stringify(todoList));
      }
   this.removeTodo = function(taskName){
    var todoList = this.getTodos();
    todoList.splice($.inArray(taskName, todoList), 1);
    localStorage.setItem(todoKey, JSON.stringify(todoList));
     }

  this.completeTodo = function(task){
      task.completed = true;
  } 
});

Я звоню в эту службу через контроллер угловой директивы. Моя директива

app.directive("todoList", function(){
    return{
       restrict: 'E',
       replace: 'true',
       templateUrl: 'partial_template/todolist.html',
       controller: function($scope, $element, storage){
       $scope.todos = storage.getTodos();
       $scope.addTodo = function(taskName) {
            task = new TODO.task(taskName);
            storage.addTodo(task);
            // create new object
            $scope.taskName = "";
        };

        $scope.removeTodo = function(taskName){
            // remove the task from the todolist
            storage.removeTodo(taskName);
        };
        $scope.completeTodo = function(taskName){
            // change the status of the task
            storage.completeTodo(task)
        };
    }
};

});

Когда я добавляю todo item, он не отражается на $ scope.todos. Если мы обновим его внутри функции, он получит обновление. Но я думаю, что это должно отражать изменение вне функции.

  • 0
    Как сказал @SSH в своем ответе, вы фактически не $scope.todos массив $scope.todos ни в одной из своих функций. Вы прочитали значения из storage при запуске приложения, и любые изменения в хранилище не являются изменениями в $scope.todos если только вы не прочитали локальное хранилище и снова не проанализировали его через анализатор JSON.
Теги:

1 ответ

2

Вы только устанавливаете $ scope.todos один раз при запуске своего контрольного контроллера. Лучшим вариантом может быть поддержка todoList как общедоступного массива в службе хранения и point $ scope.todos. В противном случае вам нужно обновить $ scope.todos в каждой функции, где вы меняете список todos.

  • 0
    Я связываю addTodo с областью не тогда, когда область обнаруживает изменение, которое будет автоматически отражать изменения.

Ещё вопросы

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