Я пытаюсь создать свою собственную телеграмму в Angular и Node. Мой контроллер обрабатывает как пользовательские тележки в базе данных mongo, так и тележки в локальном хранилище (если у пользователя нет учетной записи). Прямо сейчас я создал способ для моего контроллера корзины удалить элемент корзины как из локального хранилища, так и из базы данных. Мой угловой вид наблюдает за объектом.
$scope.lineItems
Заполнение корзины предметами. Прямо сейчас я могу успешно получить обновленную корзину, но мне нужно обновить мою страницу. Каким будет лучший способ обновить область действия путем запуска функции, которая обновляет область действия?
Код:
if ( token ) {
var payload = authService.parseToken(token);
dataService.getCart(payload._id).then(function (resolve){
if (resolve.data){
$scope.lineItems = resolve.data;
$scope.deleteLineItem = function(lineitem){
dataService.deleteLineItem([lineitem.lineItemID, payload._id]);
}
}
}, function(reason){
console.log(reason);
});
} else {
if (dataService.retrieveLocal('localCart')){
$scope.lineItems = dataService.retrieveLocal('localCart');
$scope.deleteLineItem = function(lineitem){
var cart = dataService.retrieveLocal('localCart');
var updatedCart = cart.filter(function(item){
if (lineitem.lineItemID != item.lineItemID){
return item
}
})
dataService.storeToLocal('localCart', updatedCart);
}
}
}
Я настоятельно рекомендую вам не использовать AngularJS Watcher
из-за большой нагрузки. Обычно в приложении стараются минимизировать ваши наблюдатели (таймеры). Кроме того, в вашем случае вам не нужно использовать watcher
, потому что, когда вы используете LocalStorage
нет необходимости обновлять страницу на всех вкладках браузера снова. Фактически, элементы вашей корзины просто смотрят ваши $localStorage.lineItems
вместо $ scope.lineItems, и поскольку обновлен параметр $ localStorage.lineItems, вся вкладка браузера будет обновляться автоматически. И на одной вкладке у вас будет триггер для запуска запроса и обработки на стороне сервера на основе события клика и т.д. Затем в ответ обновите переменную localStorage ($localStorage.lineItems
), поэтому ваш контент будет всегда обновляться.