php - VueJs Laravel 7 - 更好的方式结构项目
问题描述
我在我的 Laravel 项目中使用 VueJs,我的项目有这个结构。
我有一个名为“app.blade.php”的刀片文件,在这个刀片中我放置了我的 .css 文件和我想要用户的脚本文件,包括“app.js”。
在此之后我还有一些其他页面,例如 a.blade.php 、 b.blade.php ,因为这些页面我将从 app.blade.php 扩展布局。
但想象一下,在 a.blade.php 页面上,我想使用一个名为 CarComponent 的组件 vue。
所以在 a.blade.php 我创建了一个像这样的 div
<div id="app>
<CarComponent></CarComponent>
</div>
并想象在我的 b.blade 中我想使用一个名为“StoreComponent”的组件
<div id="app">
<StoreComponent></StoreComponent>
</div>
在我的文件 resources/js/app.js 中,我有这个结构的例子:
window.Vue = require('vue');
Vue.component('CarComponent',require('./components/CarComponent.vue').default);
Vue.component('StoreComponent',require('./components/StoreComponent.vue').default);
const app= new Vue({
el: '#app',
});
但有时,我不想在某些页面上使用 vuejs,所以警告找不到元素“#app”。有办法解决这个问题吗?
解决方案
我使用以下结构,效果很好:
在 app.blade.php 上,我有一个这样的主 div:
<div class="container" id="app">
@yield('content')
</div>
所以,基本上,id="app" 的 div 存在于所有视图中,不管它是否是 Vue。
然后,我有另一个刀片组件(component.blade.php),就是这样:
@extends('layouts/app')
@section('content')
<{{ $component }}
@if(isset($params))
@foreach($params as $param => $val)
@if(is_object($val) || is_array($val))
:{{$param}} = "{{ json_encode($val) }}"
@else
{{$param}} = "{{$val}}"
@endif
@endforeach
@endif
/>
@stop
然后在我的控制器上,我执行以下操作:
namespace App\Http\Controllers;
class CarController extends Controller
{
public function index()
{
$params = [
'foo' => 'bar',
];
return view('component')
->with('params', $params)
->with('component', 'CarComponent');
}
}
最后,在我的 CarComponent.vue 上,我可以像这样获得这些参数:
export default {
props: [
'foo'
],
}
您还可以将刀片文件保持在最低限度并重复使用大量代码。
推荐阅读
- aws-lambda - 您如何使用别名将 AWS lambda 从一个环境转移/升级到另一个环境(例如,从开发到产品)?
- amazon-s3 - 如何在 amazon linux 2 或 centos 中将 s3fs 从 v1.74 更新到最新版本?
- wordpress - 如何阻止一个国家/地区访问我的网站,除了几个 IP 地址?
- angular - 如何将 Ionic 4 组件包含到 Groovy 服务器页面 (GSP) 中?
- java - Selenium Java:无法通过自定义上传上传文件
- networking - 是否可以从目标 IP 获取网站 url?
- javascript - 如何在 ES6 中实现命名构造函数
- arduino - FreeRTOS 内核如何暂停 Arduino UNO 上的任务?
- git - 移动整个 git 目录
- string - 使用 T-SQL 提取字符串