Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.01.2017, 16:30
Аспирант
Отправить личное сообщение для okuznetsov1 Посмотреть профиль Найти все сообщения от okuznetsov1
 
Регистрация: 02.11.2016
Сообщений: 65

Как в angularjs соединиться с базой данных (на примере todo-list ниже)?
В данном примере реализовал отображение данных из json-файла, теперь нужно отображение данных из базы данных. Где-то что-то делаю не так, помогите.

app.js

Код:
    var app = angular.module('todoList',[]);

    app.controller('TodoController', ['$scope', '$http', function($scope, $http) {
        
        $scope.todoslist = list;
        
        $scope.addTodo = function() {

            $scope.todoslist.push({
                    "id": ""+$scope.todoslist.length + 1,
                    "description": ""+$scope.newTodo,
                    "completed": "false"
            });

        };

	$scope.deleteTodo = function (todo) {

            if (''+todo.completed === "true"){
                $scope.todoslist.splice($scope.todoslist.indexOf(todo), 1);
            }
	};
        
	$scope.markAll = function (completed) {

		$scope.todoslist.forEach(function (todo) {
                    
                    todo.completed = completed;
                    
		});
                
	};                
        
    }]);


    var list = [
                {"id":"1","description":"text 1","completed":"false"},
                {"id":"2","description":"text 2","completed":"false"},
                {"id":"3","description":"text 3","completed":"false"},
                {"id":"4","description":"text 4","completed":"false"},
                {"id":"5","description":"text 5","completed":"false"}
        ];
  
})();

todo-list.js

Код:
<!DOCTYPE html>

<html lang="ru" ng-app="todoList">
    
  <head>
      
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <script type="text/javascript" src="js/angular.min.js"></script>
    <script type="text/javascript" src="js/app.js"></script>
    <script>
    </script>
        
  </head>
  
  <body>
      
    <div ng-controller="TodoController">

        <input type="checkbox" ng-model="statusChecked" ng-click="markAll(statusChecked)"><b>Список всех дел</b>
        
        <ul>
            <li ng-repeat="todo in todoslist">
                <div>
                    <input type="checkbox" ng-model="todo.completed">
                    <label ng-click="showBlock = ! showBlock">{{todo.description}}</label>
                    <a href=""  ng-click="deleteTodo(todo)">delete</a>
                    <a href="" ng-click="showBlock = ! showBlock">edit</a>
                    <div ng-show="showBlock">
                        <input ng-model="todo.description">
                    </div>
                    
                </div>

            </li>
        </ul>

        <div>

            <form id="todo-form" ng-submit="addTodo()">
                    <input id="new-todo" placeholder="Что нужно сделать?" ng-model="newTodo" autofocus>
                    <div>
                        {{newTodo}}
                    </div>
            </form>

        </div>

    </div>
        
  </body>
  
</html>
Делал так (но не работает, где-то что-то делаю не так):

Код:
(function(){

    var app = angular.module('todoList',[]);

    app.controller('TodoController', ['$scope', '$http', function($scope, $http) {
        
//        $scope.todoslist = list;

        $scope.todoslist = [];
        $http.get('/anguler-tasks/js/getTodoData.json')
            .then(function(data) {

                $scope.todoslist = data;

            },
            function(err) {
                res = err;
            });
        
        
        $scope.addTodo = function() {

            $scope.todoslist.push({
                    "id": ""+$scope.todoslist.length + 1,
                    "description": ""+$scope.newTodo,
                    "completed": "false"
            });

        };

	$scope.deleteTodo = function (todo) {

            if (''+todo.completed === "true"){
                $scope.todoslist.splice($scope.todoslist.indexOf(todo), 1);
            }
	};
        
	$scope.markAll = function (completed) {

		$scope.todoslist.forEach(function (todo) {
                    
                    todo.completed = completed;
                    
		});
                
	};                
        
        

    }]);

  
})();
Ответить с цитированием
  #2 (permalink)  
Старый 17.01.2017, 17:07
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Сообщение от okuznetsov1 Посмотреть сообщение
реализовал отображение данных из json-файла
Где json-файл не вижу?
Ответить с цитированием
  #3 (permalink)  
Старый 17.01.2017, 18:09
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

okuznetsov1,
$http.get('/anguler-tasks/js/getTodoData.json')
            .then(function(response) {

                $scope.todoslist = response.data;

            },
            function(err) {
                res = err;
            });
Ответить с цитированием
  #4 (permalink)  
Старый 17.01.2017, 18:45
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

okuznetsov1, вот destus реализовал отображение данных из json-файла в отличии от тебя, теперь для отображение данных из базы данных:

getTodoData.php
<?php 
// ...
// ... преобразуем данные из базы в структуру вида $list ...
// ...
$list = array(
    array("id" => "1", "description" => "text 1", "completed" => "false"),
    array("id" => "2", "description" => "text 2", "completed" => "false"),
    array("id" => "3", "description" => "text 3", "completed" => "false")
);
header('Content-Type: application/json');
echo json_encode($list);
Ответить с цитированием
  #5 (permalink)  
Старый 17.01.2017, 19:35
Аспирант
Отправить личное сообщение для okuznetsov1 Посмотреть профиль Найти все сообщения от okuznetsov1
 
Регистрация: 02.11.2016
Сообщений: 65

destus извиняюсь, забыл привести json -файл.

>по поводу: response.data;
видимо сегодня нужно заканчивать с работой, наверное перетрудился.

спасибо большое, очень помогли
Ответить с цитированием
  #6 (permalink)  
Старый 18.01.2017, 12:26
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

okuznetsov1, так дело не в json-файле как таковом, а в том что ты массив в переменной list называешь json-файлом, но это не так, json - это строка, json-файл - это файл с контентом этой строкой.
Ответить с цитированием
  #7 (permalink)  
Старый 18.01.2017, 15:26
Аспирант
Отправить личное сообщение для okuznetsov1 Посмотреть профиль Найти все сообщения от okuznetsov1
 
Регистрация: 02.11.2016
Сообщений: 65

у себя в сценарии разумеется я делаю так:
$http.get('/anguler-tasks/getTodoData.php')

но для данного топика я указал "getTodoData.json" - по сути это тоже самое (тот же самый json-формат)
Ответить с цитированием
  #8 (permalink)  
Старый 18.01.2017, 17:35
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

okuznetsov1, ясно, то есть реализовал отображение имени файла в коде, а я почему то подумал что "реализовал отображение данных из json-файла", наверное это тоже то же самое, в таком случае стоило бы более точно формулировать вопросы.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29
Не понимаю JavaScript. Как сделать ожидание события загрузки данных? xintrea AJAX и COMET 7 01.06.2013 17:18
Центрирование Div-а ч2 alex2012 jQuery 0 15.11.2012 19:01