2014-11-04 70 views
2

我想要定義一個處理大部分請求的通用路由。爲每個功能添加添加路由是我覺得不好,不可維護的。如何在angularjs中從路由構造控制器名稱

所以我的目標是編寫一個通用路由並動態地解決這些問題,包括解析所有相關的控制器服務文件,解析templateUrl和解析控制器名稱。 我可以解決/構造除控制器名稱以外的所有內容。請幫我身邊

我與自定義解析路線的方式:

$routeProvider 
.when('/:module/:controller/:action?', routeResolver.resolve()) 

在我的自定義解析:

function routeResolverProvider(){ 

this.$get= function(){ 
    return this; 
} 

this.resolve = function (options) { 
var route = {}; 

route.templateUrl = function (params) { 
    var path = String.format('/app/components/{0}/{1}.view.html', params.module, params.controller); 
    return path; 
}; 

//================================================================================ 
route.controller='THIS IS WHAT I WANT TO CONSTRUCT FROM ROUTE as templateUrl' 
//================================================================================ 

route.resolve = { 
    loadDependencies: ['$q', '$rootScope', '$route', function ($q, $rootScope, $route) { 
     // MY RESOLVE LOGIC HERE 
     // I construct dependent file path from route values 
     // String.format('/app/components/{0}/{1}.controller.js', params.module, params.controller); 
    }] 
}; 

return route; 
}} 

app.provider('routeResolver', routeResolverProvider) 

一些好文章: https://github.com/angular/angular.js/wiki/Understanding-Dependency-Injection https://medium.com/opinionated-angularjs/advanced-routing-and-resolves-a2fcbf874a1c

+0

'我試圖定義一個通用路由,它將處理大部分請求'你不能只用'otherwise'嗎? – dfsq 2014-11-04 12:50:08

回答

0

非常感謝丹,我一直在尋找的正是這種也。所以我將我的解析器修改爲最終的賓果。

this.$get = ['$rootScope', '$scope', '$route', '$controller', function() { 
    return this; 
}]; 

route.controller = function ($rootScope, $scope, $route, $controller) { 
    var params = $route.current.params; 
    $controller(params.controller.toLowerCase() + 'Controller', {$scope: $scope}); 
} 

最後我解決了我的問題,但想討論這種方法的可能的缺點。

相關問題