我是AngularJS的新手,很难让它与Laravel顺利合作。我正试图为一个网站创建一个后端应用程序,并希望以'/admin'为前缀的路由都由AngularJS管理,而不需要在URL中添加哈希值。
Laravel的后端
<路线/strong>
Route::group(['prefix' => 'admin'], function()
{
Route::get('/', function() {
return View::make('backend/dashboard');
});
});
View - dashboard.blade.php
<!doctype html>
<html ng-app="glenn">
<head>
<title>Laravel and Angular Together</title>
<meta charset="utf-8">
<base href="/admin">
<script src="vendor/angular.js"></script>
<script src="vendor/angular-route.js"></script>
<script src="js/app.js"></script>
</head>
<body>
<h1>Dashboard</h1>
<div class="container">
<ng-view></ng-view>
</div>
</body>
</html>
AngularJS前端
app.js
var glenn = angular.module('glenn', ['ngRoute']);
glenn.config(function($routeProvider, $locationProvider) {
$routeProvider
.when('/test', {
templateUrl: 'test.html',
controller: 'TestController'
})
.otherwise({
redirectTo: '/'
});
$locationProvider.html5Mode(true);
});
glenn.controller('TestController', function($scope) {
});
问题:当我将浏览器的url指向admin/test时,我会收到Laravel的NotFoundHttpException
,因为Laravel试图接管我希望Angular负责的路由…我怎样才能解决这个问题?由于
因为angular会为admin处理所有的路由(你不会在Laravel中指定任何进一步的路由),所以你可以不使用前缀。
试题:
Route::get('admin{angular}', function () {
return View::make('backend/dashboard');
})->where('angular', '.*');
代替:
Route::group(['prefix' => 'admin'], function()
{
Route::get('/', function() {
return View::make('backend/dashboard');
});
});
这应该捕获所有以admin开头的路由,我相信这是您想要的。
与此相关的是:
如果你正在创建一个Angular + Laravel的web应用,你希望所有路由都由AngularJS处理,你可以在Laravel中指定一个'catch-all'路由来避免NotFoundHttpException
错误:
App::missing(function($exception)
{
return View::make('backend/dashboard'); // this should match your index route
});