我正在将AngularJS和Laravel用于我的Web应用程序项目。 我的路由如下所示:
AngularJS:
angular.config(['$stateProvider','$urlRouterProvider',function($stateProvider,$urlRouterProvider) {
$urlRouterProvider.otherwise('/');
$stateProvider
.state('home', {
url: '/',
templateUrl: '/admin/dashboard'
});
}]);
Laravel:
Route::group(array('prefix'=>'admin', function(){
Route::get('/', ['as'=>'admin.main',function(){
return view('main');
}]);
Route::get('/dashboard', ['as'=>'admin.dashboard',function(){
return view('dashboard');
}]);
});
我面临的问题是,我需要在2个地方声明路由路径。 一个在Angular,另一个在Laravel。 因此,每次添加新路线或更改路线时,都需要在2个地方工作。 随着应用的增长,这将变得乏味且难以维护。
无论如何,我只需要在一个地方设置路由URL,对两个地方都有效?
我假设您正在构建单页应用程序。 这意味着在服务器端(Laravel),您需要对所有GET请求使用相同的模板,例如
Route::group(['prefix' => 'admin'], function() {
Route::get('(.*)', function() {
return view('dashboard');
});
});
在客户端(AngularJS)上,您正在按照有问题的方式进行路由。
顺便说一句,您在Laravel路由中使用了错误的语法,这是不正确的:
Route::get('/', ['as'=>'admin.main',function(){
}]);
这应该是这样的:
Route::get('/', ['as'=>'admin.main'],function(){
// ^
});
在Laravel 5.4中,我无法使用正则表达式来定义路由,如下所示:
Route::get('/account/(.*)', function() { return view('index'); });
相反,我必须使用参数并使用正则表达式来确保它捕获了所有路径:
Route::get('/account/{path?}', function() {
return view('index');
})->with('path', '.*');