@naneri
PHP разработчик.

Angularjs как организовать сохранение данных

shaping-up-with-angular-js-83ceb89bd5255
В данное время прохожу курс по Ангулару на codeschool и параллельно читаю туториал на angularjs.org.
Чего не могу понять - так это каким образом организовать сохранение данных?
Проходя туториал на angularjs.org - я только понял как получать данные. По отправке информации нету.
Также интересно - Скажем у меня есть приложение - стандартное "Todo Application" что будет если данные которые добавит пользователь не отправятся (скажем если у юзера неожиданно отрубился инет), но при этом у него будут отображены. В принципе я понимаю, что можно сделать чтобы данные появляются на его странице только после доставки на сервер, но тогда по идее будет небольшая задержка из-за ожидания доставки до сервера (если я конечно всё правильно понимаю).

Бэкэнд хочу организовать на php (планирую использовать микрофреймворк - silex или slim) и mysql.

Вот если что мой код для todo application делал его по туториалу в нете. Код вытаскивает список дел, с файла todos.json .
<!doctype html>
<html ng-app='todo'>
    <head>
        <meta charset ='utf-8'>
        <title>Todo App</title>
        <style>
            li {
                list-style-type: none;
            }
            .done {
                text-decoration: line-through;
                color: #ccc;
                
            }
        </style>
    </head>


    <body>


        <div ng-controller="todoController">
            <form name='form' ng-submit='addTodo()'>
                <input type='text' name='newTodo' ng-model='newTodo' required />
                <button ng-disabled='frm.$invalid'>Go</button>
            </form>

            <button ng-click='clearCompleted()'>Clear Completed</button>

            <ul>
                <li ng-repeat='todo in todos'>
                    <input type='checkbox' ng-model='todo.done'/>
                    <span ng-class="{'done':todo.done}">{{todo.title}}</span>
                </li>
            </ul>
        </div>



        <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js"></script>
        <script>
                        var todo = angular.module('todo', []);
                        todo.controller('todoController', function($scope, $http) {
                                $http.get('todos/todos.json').success(function(data) {
                                    $scope.todos = data;
                                });

                                $scope.addTodo = function() {
                                    $scope.todos.push({'title': $scope.newTodo, 'done': false});
                                    $scope.newTodo = '';
                                };
                                $scope.clearCompleted = function() {
                                    $scope.todos = $scope.todos.filter(function(item) {
                                        return !item.done;
                                    });
                                };
                            });
        </script>
    </body>
</html>


Update

Попробовал запилить взаимодействие с сервером. На компе стоит xampp, в качестве бэкэнда выступает PHP(Codeigniter) + MySQL. Получаются такие две проблемы:
- када вручную останавливаю MySQL - при пометке задания как выполненного - оно становится выполненным в браузере, но в БД изменение не сохраняется. При последующем включении MySQL и перезагрузке страницы - все отметки слетают, потому что вытаскивается значение из БД.
- када добавляю новые задания - они появляются, только при успешном отзыве от сервера, то есть преимущество ангулара слетает на нет, потому что из-за небольшого лага приложение перестаёт быть похожим на нативное.

P.S. заранее извиняюсь если где что не так сформулировал.
  • Вопрос задан
  • 7294 просмотра
Пригласить эксперта
Ответы на вопрос 4
TekVanDo
@TekVanDo
Javascript Developer
Если используете Rest модель, то создайте resource servise пример
Для того чтобы данные не терялись (отключенный интернет) можно дублировать их в local storage
Ответ написан
pavel_salauyou
@pavel_salauyou
Symfony2 & Angular разработчик
для отправки данных необходимо пару миллисекунд, вероятность того что у пользователя отключится интеренет именно в промежутке в эти пару милилсекунд маловероятна.
Ответ написан
kompi
@kompi
nullstack devoops
Добавить таймаут для промиса. Соответственно, по истечении времени, делать автоматический повтор запроса или ожидать события от пользователя.
Ответ написан
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Посмотрите в сторону того, как это ораганизовано в Backbone. Более того, это нормально использовать Backbone в контексте angular-based приложеня?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы