2015-11-01 90 views
1

我在使用MVC架构的作业中使用了一个轻量级的PHP框架,因此大多数URL都是像/controller/action/一样构建的。我目前在一个项目中使用相同的PHP框架和AngularJS + REST API,我将在我的空闲时间开始开发项目。我已经熟悉了AngularJS的基础知识,并构建了一个结构+令牌认证。AngularJS自动路由

我已经通过拆分window.location.href创建了一个路由,但是当控制器需要参数时,它应该像通配符一样。这可以做到吗?或者我们坚持手动创建所有路由参数?

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

编辑:控制器不是nescessary如果在视图元素初始化,但methodPath只是方法与第一个字母大写,因此创建一个控制器usersRegister,路径为/用户/注册

回答

0

好,其实我找到了答案。我只是找出路径的其余部分,并将它们包含在when中。这是一个粗略的例子,如果找不到一个默认方法,例如mainindex,应该扩展以设置默认方法。

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; 
}