Я указал контроллер в директиве. Я выполняю операцию добавления и удаления в списке данных. Но когда я добавляю данные в список, глобальная переменная области не получает обновления. Я использую службу для получения данных. Мой сервис//служба углового хранения
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. Если мы обновим его внутри функции, он получит обновление. Но я думаю, что это должно отражать изменение вне функции.
Вы только устанавливаете $ scope.todos один раз при запуске своего контрольного контроллера. Лучшим вариантом может быть поддержка todoList как общедоступного массива в службе хранения и point $ scope.todos. В противном случае вам нужно обновить $ scope.todos в каждой функции, где вы меняете список todos.
$scope.todos
массив$scope.todos
ни в одной из своих функций. Вы прочитали значения изstorage
при запуске приложения, и любые изменения в хранилище не являются изменениями в$scope.todos
если только вы не прочитали локальное хранилище и снова не проанализировали его через анализатор JSON.