结合 AngularJS 和 Laravel 路由

Posted

技术标签:

【中文标题】结合 AngularJS 和 Laravel 路由【英文标题】:Combine AngularJS and Laravel Routing 【发布时间】:2015-07-08 12:44:29 【问题描述】:

我在我的网络应用项目中使用 AngularJS 和 Laravel。我的路由如下所示:

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,但对两者都有效?

【问题讨论】:

【参考方案1】:

我假设您正在构建单页应用程序。这意味着在服务器端(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()
//                                 ^
);

【讨论】:

【参考方案2】:

在 Laravel 5.4 中,我无法使用正则表达式定义路由,如下所示:

Route::get('/account/(.*)', function()  return view('index'); );

我不得不使用一个参数并使用正则表达式来确保它捕获所有路径:

Route::get('/account/path?', function() 
    return view('index');
)->with('path', '.*');

【讨论】:

以上是关于结合 AngularJS 和 Laravel 路由的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 AngularJs 处理 Laravel 路由?

如何将 Angular js 路由与 laravel/lumen 路由一起使用?

同时使用 Laravel 和 Angularjs 路由

Laravel 4 和 AngularJS - 使用路由清理 URL

Laravel、AngularJS 和 CORS 的路由问题

Laravel + AngularJS Nginx 路由