Javascript 如何从Laravel views/templates目录提供单页AngularJS应用程序?
我正在尝试结合一个SPA angular应用程序,该应用程序可以利用Laravel的功能,如csrf保护。我可以将整个AngularJS应用程序放在Laravel的Javascript 如何从Laravel views/templates目录提供单页AngularJS应用程序?,javascript,php,angularjs,laravel,Javascript,Php,Angularjs,Laravel,我正在尝试结合一个SPA angular应用程序,该应用程序可以利用Laravel的功能,如csrf保护。我可以将整个AngularJS应用程序放在Laravel的public/目录中,但我不确定这样做是否正确 我要找的是guidace,它介绍了如何能够提供一个index.php,可以与Laravel进行交互,单页AngularJS应用程序将接管该应用程序。在我的例子中,Laravel是单页应用程序的API 问题是: Laravel路由是为/app3定义的,它从模板/返回index.php 当然
public/
目录中,但我不确定这样做是否正确
我要找的是guidace,它介绍了如何能够提供一个index.php
,可以与Laravel进行交互,单页AngularJS应用程序将接管该应用程序。在我的例子中,Laravel是单页应用程序的API
问题是:
/app3
定义的,它从模板/
返回index.php
/app
定义路由,但是,所有AngularjS资产都位于public/app/
中,请求app/
会返回一个默认目录列表,因为/app
中没有index.php/html。只需将index.php
放在public/
中,就会得到一个空白页面,因为出于某种原因,服务器从未解析过php。将index.php
更改为index.html
是可行的,但是如何利用像Laravels csrf保护这样的功能呢
index.php
正确加载所有AngularJS资源,并且没有控制台错误index.php
中的侧栏链接,通常会返回一个AngularJS模板,该模板应放在index.php
中,而当目录不包含index.php/html时,会加载默认目录列表index.php中
将单页AngularJS应用程序与Laravel结合的最佳方式是什么?假设您有以下路线:
Route::get('/app3', 'RouteController@serveAngular');
然后你有一个控制器
class RouteController extends BaseController{
public function serveAngular(){
return View::make('angular/index');
}
}
那你就有
-views
-angular
-index.blade.php
然后在index.blade.php中只包含角度标记
<div ng-app="myApp">
这样你就可以很容易地把它挂在你的角度模板上
@section('scripts')
<script src="/path/to/my/AnguularJS.js"></script>
@stop
@节(“脚本”)
@停止
希望这有帮助。终于找到了。问题是我的AngularJS路线链接错误
以下是我的工作配置:
sidebar.html
希望这能帮助那些想要将移动AngularUI与Laravel结合起来的人
感谢@Ohgodwhy澄清AngularJS模板需要位于public/
目录中。您可以在public文件夹中执行类似操作
公用文件夹中每个目录的内容:
public/app : Contains all AngularJS related JavaScript files (controllers and lib directories)
public/app/controllers: Contains all AngularJS controllers
public/app/lib : This directory will contain all AngularJS core files. You can also load AngularJS from a CDN network.
public/css : Contains all CSS files.
public/js : Contains all regular JavaScript files for our UI.
你可以在网站上阅读一篇完整的文章
为什么不能将HTML标记转换为视图,并在路由所利用的控制器中呈现它?AngularJS只是HTML标记和JavaScript,您应该能够钩住头变量并包含AngularJS,然后将AngularJS放入视图中,并在到达调用控制器的路由时从控制器返回Angular视图,在本例中为/app3
@Ohgodwhy,请详细说明。我不太明白。每个AngularJS templateUrl是否都需要一个Laravel定义的路由?如何具体配置?您是说将所有HTML和AngularJS代码包含到Laravel控制器中?如果我理解正确,这不是有点难看吗?我在下面举了一个例子。对于集成角度应用程序,我不认为我的方法难看,但我以前犯过多次错误:这里有一个在Laravel中集成的Angular的新版本的例子,除了没有控制器之外,这是我已经拥有的。Laravel的路由定义在那里链接了一个闭包,并返回index.php(可以很容易地是index.blade.php),但是,这个方法的问题是AngularJS模板没有包含在index.php
中,但是作为一个单独的链接。我不确定你所说的AngularJS模板是什么意思,它没有包含在index.php中,而是作为一个单独的链接。你能帮我贴点东西让我看看我们在说什么吗?请访问http://persianturtle.com/app3/
并单击侧边栏中的链接。也许这是解释我的问题的最简单方法。@RaphaelRafatpanah左边的链接不应该自动填充右边的数据,而不是重新加载页面吗?是的。不幸的是,我还没有弄清楚如何配置SPA,使其在内部自动繁殖。是否所有模板文件都需要位于public/
目录中?如果是,应将
设置为什么?
Laravel
routes.php
...
$router->get('/app3', function() {
return view('app3.index');
});
AngularJS
index.php
<base href="/" />
...
<!-- Sidebars -->
<div ng-include="'/app/sidebar.html'"
ui-track-as-search-param='true'
class="sidebar sidebar-left"></div>
demo.js
app.config(function($routeProvider) {
$routeProvider.when('/', {templateUrl: 'app/home.html', reloadOnSearch: false});
$routeProvider.when('/app/', {templateUrl: 'app/home.html', reloadOnSearch: false});
$routeProvider.when('/app/scroll', {templateUrl: 'app/scroll.html', reloadOnSearch: false});
$routeProvider.when('/app/toggle', {templateUrl: 'app/toggle.html', reloadOnSearch: false});
$routeProvider.when('/app/tabs', {templateUrl: 'app/tabs.html', reloadOnSearch: false});
$routeProvider.when('/app/accordion', {templateUrl: 'app/accordion.html', reloadOnSearch: false});
$routeProvider.when('/app/overlay', {templateUrl: 'app/overlay.html', reloadOnSearch: false});
$routeProvider.when('/app/forms', {templateUrl: 'app/forms.html', reloadOnSearch: false});
$routeProvider.when('/app/dropdown', {templateUrl: 'app/dropdown.html', reloadOnSearch: false});
$routeProvider.when('/app/drag', {templateUrl: 'app/drag.html', reloadOnSearch: false});
$routeProvider.when('/app/carousel', {templateUrl: 'app/carousel.html', reloadOnSearch: false});
$routeProvider.when('/app/toggleLegacy', {templateUrl: 'app/toggleLegacy.html', reloadOnSearch: false});
sidebar.html
<a class="list-group-item" href="/app3/#/app">Home <i class="fa fa-chevron-right pull-right"></i></a>
<a class="list-group-item" href="/app3/#/app/scroll">Scroll <i class="fa fa-chevron-right pull-right"></i></a>
<a class="list-group-item" href="/app3/#/app/toggle">Toggle <i class="fa fa-chevron-right pull-right"></i></a>
<a class="list-group-item" href="/app3/#/app/tabs">Tabs <i class="fa fa-chevron-right pull-right"></i></a>
<a class="list-group-item" href="/app3/#/app/accordion">Accordion <i class="fa fa-chevron-right pull-right"></i></a>
<a class="list-group-item" href="/app3/#/app/overlay">Overlay <i class="fa fa-chevron-right pull-right"></i></a>
<a class="list-group-item" href="/app3/#/app/forms">Forms <i class="fa fa-chevron-right pull-right"></i></a>
<a class="list-group-item" href="/app3/#/app/dropdown">Dropdown <i class="fa fa-chevron-right pull-right"></i></a>
<a class="list-group-item" href="/app3/#/app/test/invoice">Invoice <i class="fa fa-chevron-right pull-right"></i></a>
<a class="list-group-item" href="/app3/#/app/test">Test <i class="fa fa-chevron-right pull-right"></i></a>
public/app : Contains all AngularJS related JavaScript files (controllers and lib directories)
public/app/controllers: Contains all AngularJS controllers
public/app/lib : This directory will contain all AngularJS core files. You can also load AngularJS from a CDN network.
public/css : Contains all CSS files.
public/js : Contains all regular JavaScript files for our UI.