Маршрутизация с помощью AngularJS и Slim PHP

Я работаю с AngularJS, и я пытаюсь подключить к нему свое приложение.

До сих пор я использовал Slim PHP и могу получить все записи из моей базы данных MySql, но я не могу получить конкретную запись. Я написал код PHP и могу перейти к «../requests/#» и получить ответ JSON на правильную идентификационную запись. То, что я не могу получить, – это работать с интерфейсом. В приведенном ниже коде я могу создать список запросов и нажать на тот, который я хочу открыть viewRequest.html. Однако моя страница запроса запроса ВСЕГДА отображает первую запись, а не запись в URL-адресе.

Slim – Index.PHP

<?php require 'Slim/Slim.php'; \Slim\Slim::registerAutoloader(); use Slim\Slim; $app = new Slim(); $app->get('/requests', 'getRequests'); $app->get('/requests/:id', 'getRequest'); $app->post('/add_request', 'addRequest'); $app->run(); function getRequests() { $sql = "select * FROM change_request ORDER BY id"; try { $db = getConnection(); $stmt = $db->query($sql); $requests = $stmt->fetchAll(PDO::FETCH_OBJ); $db = null; echo json_encode($requests); } catch(PDOException $e) { echo '{"error":{"text":'. $e->getMessage() .'}}'; } } function getRequest($id) { $sql = "SELECT * FROM change_request WHERE ID=$id"; try { $db = getConnection(); $stmt = $db->prepare($sql); $stmt->execute(); $request = $stmt->fetchObject(); $db = null; echo json_encode($request); } catch(PDOException $e) { echo '{"error":{"text":'. $e->getMessage() .'}}'; } } ?> 

App.JS

 var app = angular.module('changeControlApp', [ 'ngRoute', 'ngResource' ]); app.config(function($routeProvider, $locationProvider) { $routeProvider .when('/', {templateUrl: 'app/partials/requestList.html', controller: 'viewController' }) .when('/requests', {templateUrl: 'app/partials/requestList.html', controller: 'viewController' }) .when('/createRequest', {templateUrl: 'app/partials/viewRequests.html', controller: 'createRequestController' }) .when('/settings', {templateUrl: 'app/partials/settings.html', controller: 'settingsController'}) .when('/requests/:id', {templateUrl: 'app/partials/viewRequests.html', controller: 'viewRequestController' }) .otherwise({ redirectTo: '/' }); }); app.controller('mainController', function($scope) { // create a message to display in our view $scope.message = 'Everyone come and see how good I look!'; }); app.controller('viewRequestController', function($scope, $location, $route, $routeParams, $resource) { $scope.message = 'Pow!'; $scope.header = 'View Change Request'; var request_Id = $routeParams.requestId; var Request = $resource('http://pdgrosit02v/changeRequest/app/api/requests/id', { id: request_Id }); $scope.request = Request.get(); }); app.controller('viewController', function($resource, $scope, $location, $route) { var Requests = $resource('http://pdgrosit02v/changeRequest/app/api/requests'); $scope.requests = Requests.query(); }); 

viewRequests.HTML

 <div class="container-fluid" > <form class="form-horizontal" role="form"> <div class="form-group"> <div class="text-center"> <h1>{{ header }}</h1> <p>{{ message }}</p> <p>{{ target }}</p> </div> </div> <div class="form-group"> <label class="col-sm-2 control-label">Id:</label> <div class="col-sm-4"> <input name="id" class="form-control" type="text" value="{{request.ID}}" disabled /> </div> <label class="col-sm-2 control-label">Date:</label> <div class="col-sm-4"> <input type="date" class="form-control" value="{{request.Date_Submitted}}" required/> </div> </div> <div class="form-group"> <label class="col-sm-2 control-label">Change Initiator:</label> <div class="col-sm-4"> <input type="text" class="form-control" value="{{ request.Change_Initiator }}" required/> </div> <label class="col-sm-2 control-label">Risk Level:</label> <div class="col-sm-4"> <input type="text" class="form-control" value="{{ request.Risk_Level }}" required/> </div> </div> <div class="form-group"> <label class="col-sm-2 control-label">CI Details:</label> <div class="col-sm-4"> <input type="text" class="form-control" value="{{ request.Change_Initiator_id }}" required/> </div> </div> <div class="form-group"> <label class="col-sm-2 control-label">Requestor:</label> <div class="col-sm-4"> <input type="text" class="form-control" value="{{ request.Requestor }}" required/> </div> <label class="col-sm-2 control-label">Systems Affected:</label> <div class="col-sm-4"> <input type="text" class="form-control" value="{{ request. }}" required/> </div> </div> <div class="form-group"> <label class="col-sm-2 control-label">Implemented By:</label> <div class="col-sm-4"> <input type="text" class="form-control" value="{{ request. }}" required/> </div> <label class="col-sm-2 control-label">Implementation Date:</label> <div class="col-sm-4"> <input type="date" class="form-control" value="{{ request. }}" required/> </div> </div> <div class="form-group"> <label class="col-sm-2 control-label">Close Date:</label> <div class="col-sm-4"> <input type="date" class="form-control" value="{{ request. }}"/> </div> </div> <div class="form-group"> <label class="col-sm-2 control-label">Work to be Performed:</label> <div class="col-sm-4"> <textarea name="request.description" required>{{ request.Work_to_be_performed }}</textarea> </div> <label class="col-sm-2 control-label">Backout Plan:</label> <div class="col-sm-4"> <textarea name="request.description" required>{{ request.Backout_Plan }}</textarea> </div> </div> <div class="form-group"> <button class="edit" ng:click="editRequest()">Edit</button> <button class="save" ng:click="saveRequest()">Save</button> <button class="approve" ng:click="approveRequest()">Approve</button> </div> </form> </div> 

Пожалуйста, помогите, я близок к тому, чтобы получить это, но я не могу заставить routeParams работать, и я не могу получить правильную запись.

Заранее спасибо!

Я не использую php, а скорее NodeJs. Однако это то, что я заметил при использовании маршрутизации с помощью AngularJs и бэкэнд.

Первоначальный запрос

Когда пользователь выполнит первоначальный запрос для вашего приложения. Сначала он проходит через php-логику. (например, $app->get('/requests', 'getRequests') ). В моем случае. Работа php / back-end здесь – это две вещи:

  • Получайте данные из базы данных только для целей SEO (большинство искателей не выполняют client-js, поэтому вам нужно вставить эти данные перед отправкой страницы пользователю)

  • Самое главное, укажите индексный файл в своем угловом приложении вместе со всем JS. Как только пользователь получит это, Угловые бутстрапы, и вам хорошо идти.

Последующие запросы

Как только пользователь загрузил ваше приложение «Угловое». Сервер (php) ничего не знает о том, как пользователь перемещается в вашем угловом приложении . Помните, что угловая клиентская сторона и пытается уменьшить количество запросов на сервер. Когда пользователь переходит к «(#) / requests / 1234», он $app->get('/requests/:id', 'getRequest'); .when('/requests/:id' маршрут, но не $app->get('/requests/:id', 'getRequest'); Если вы хотите получить доступ к конечной точке, которая получает данные из вашего db, вам нужно использовать службу $http в угловом режиме и сделать что-то вроде этого $http.get('requests/1234') и получить данные таким образом.

Дайте мне знать, если это не ясно, подтвердите / согласитесь, если бы это было 🙂

Привет всем за вклад, я смог диагностировать проблему!

используя вкладку сети на инструментах разработчика Chrome, я увидел, что мой код отправлял слово «id», а не переменную.

Теперь я изменил свой контроллер, просто добавив параметры маршрута в строку ресурса. Кажется, теперь он отлично работает! Всем спасибо

app.js

 app.controller('viewRequestController', function($scope, $location, $route, $routeParams, $resource) { $scope.message = 'Pow!'; $scope.header = 'View Change Request'; var request_Id = $routeParams.id; var Request = $resource(('http://pdgrosit02v/changeRequest/app/api/requests/'+ request_Id)); $scope.request = Request.get(); });