2015-11-01 2 views
1

Я использую легкую структуру PHP на моей работе, которая использует архитектуру MVC, поэтому большинство URL-адресов построены как /controller/action/. Я в настоящее время находится между ними, используя ту же инфраструктуру PHP и API AngularJS + REST в проекте, который я собираюсь начать в свое свободное время. Я уже ознакомился с основами AngularJS и построил структуру + аутентификацию с помощью токенов.Автоматические маршруты AngularJS

Я уже создал маршрут, разделив window.location.href, но когда контроллеру нужны параметры, он должен быть чем-то вроде подстановочного знака. Это можно сделать? Или мы пытаемся вручную создать все параметры маршрута?

.when('/' + controller + '/' + action, { 
     templateUrl: '/assets/layouts/' + controller + '/' + action+ '.html', 
     controller: controller + methodPath 
    }) 

Edit: контроллер не nescessary если вы инициализировать его в элементе представления, но methodPath только метод с первой заглавной буквой создавая таким образом контроллер как usersRegister, путь/пользователей/регистрация

ответ

0

Колодец , на самом деле я понял это. Я просто узнал остальную часть пути и включил их в when. Это примерный пример и должен быть расширен, чтобы установить метод по умолчанию, если он не найден, например main или index.

var location = window.location.href; 
var arguments = location.split('/'); 

if(arguments.length > 4) { 
    var module = arguments[3]; 
    var method = arguments[4]; 

    var methodPath = method.charAt(0).toUpperCase() + method.slice(1); 
} 

var routeparams = []; 

for(var i = 5, x = 0; i < arguments.length; i++, x++) { 
    var argument = ':param' + x; 
    routeparams.push(argument); 
} 

routeparams = routeparams.join('/'); 

$routeProvider. 
    when('/' + module + '/' + method + '/' + routeparams, { 
     templateUrl: '/assets/layouts/' + module + '/' + method + '.html', 
     controller: module + methodPath 
    }) 

Теперь я могу получить доступ к параметрам в контроллере с

usersModule.controller('usersRegister', function($scope, $rootScope, $routeParams) { 
    $scope.uid = $routeParams.param0; 
}