Я создаю фабрику MovieCollections
в AngularJS с закрытием функции JS, так что у меня есть закрытые переменные и методы.Фабрика в основном несет коллекции фильмов в списке.С помощью открытых методов removeMovie(), updateMovie(), viewMovies(), prestineMovies()
коллекция фильмов может быть обновлена.Коллекция фильмов хранится в закрытой переменной movieCollection
.
. Проблема в том, что изменения updateMovie()
распространяются на метод viewMovies()
перед ним.
У меня естьпопытался запустить замыкание с Node.JS и удалить Local Storage вместе с угловым кодом.Никаких проблем не возникало.
Я использовал следующий код:
var app = angular.module('app');
function movieCollectionCreation(){
// private
movieCollection = [];
// prestine movieCollection
function prestineMovieCollection(){
movieCollection = [
{
id: 0,
name: "Avatar",
year: 2012,
rating: 4.8
},
{
id: 1,
name: "WestWorld",
year: 2013,
rating: 3.6
},
{
id: 2,
name: "Titanic",
year: 2001,
rating: 3.9
}
]
// public
return {
removeMovie: function(id){
// Will hold the index in the array that contains movieId
index = -1;
movieCollection.forEach(function(element, arrayIndex) {
if(element.id === id){
index = arrayIndex;
}
});
movieCollection.splice(index, 1);
window.localStorage.setItem("movieCollection", JSON.stringify(movieCollection));
},
updateMovie: function(id, movieObj){
isMovieObjValid(movieObj);
this.removeMovie(id);
movieObj.id = id;
movieCollection.push(movieObj);
window.localStorage.setItem("movieCollection", JSON.stringify(movieCollection));
},
viewMovies: function(){
console.log(movieCollection);
},
prestineMovies: function(){
prestineMovieCollection();
window.localStorage.setItem("movieCollection", JSON.stringify(movieCollection));
}
}
};
app.factory("MovieCollection", movieCollectionCreation);
app.controller('MovieCollectionTestingController', function(MovieCollection){
MovieCollection.viewMovies();
MovieCollection.updateMovie(0, {
name: "Avators",
year: 2012,
rating: 4.8
});
MovieCollection.viewMovies();
MovieCollection.prestineMovies();
});
Я ожидал следующих результатов:
(3) [{…}, {…}, {…}]
0: {id: 1, name: "WestWorld", year: 2013, rating: 3.6}
1: {id: 2, name: "Titanic", year: 2001, rating: 3.9}
2: {name: "Avatar", year: 2012, rating: 4.8, id: 0}
(3) [{…}, {…}, {…}]
0: {id: 1, name: "WestWorld", year: 2013, rating: 3.6}
1: {id: 2, name: "Titanic", year: 2001, rating: 3.9}
2: {name: "Avators", year: 2012, rating: 4.8, id: 0}
Но получил следующее:
(3) [{…}, {…}, {…}]
0: {id: 1, name: "WestWorld", year: 2013, rating: 3.6}
1: {id: 2, name: "Titanic", year: 2001, rating: 3.9}
2: {name: "Avators", year: 2012, rating: 4.8, id: 0}
(3) [{…}, {…}, {…}]
0: {id: 1, name: "WestWorld", year: 2013, rating: 3.6}
1: {id: 2, name: "Titanic", year: 2001, rating: 3.9}
2: {name: "Avators", year: 2012, rating: 4.8, id: 0}
Изменения updateMovie()
изменения имени на "Avators" с "Avatar" передаются методу viewMovies()
перед этим.