2015-11-01 91 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; 
}