当前位置: 首页 > 知识库问答 >
问题:

在刀片模板(Laravel)中本地注册Vue组件的最佳实践

杨腾
2023-03-14

我正在与Laravel Vue建立一个MPA项目,我目前在全球注册所有组件,所以我的app.js如下:

Vue.component(...)
Vue.component(...)
...
new Vue({
  el: '#app'
});

我认为如果我们只注册一些全局组件,然后注册特定刀片视图的本地组件,可能会更好。

假设在js/components文件夹中,有一个全局文件夹包含所有全局组件,一个auth/login文件夹包含登录页面的所有组件。

对于登录边栏选项卡视图:

@extends(layouts.app)
@section('content')
   <div id="login-page">
   </div>
@endsection

为该特定刀片视图构建文件/注册Vue组件的最佳做法是什么?

如有指点,将不胜感激。

共有1个答案

束帅
2023-03-14

大多数情况下,我会根据功能安排组件。js/components中的每个功能一个文件夹(如果视图复杂,还包括子文件夹)。然后我有一个组件加载器。js文件,用于跟踪所有全局组件。组件加载程序。js只包含vue中导入的根组件和部分,基本上创建了一个链。

在组件加载程序中。js文件我以Webpack可以使用分块的方式加载组件,因此每个组件都有自己的chunk-x.js文件。并且只需要在应用程序中使用加载器。js,这就是应用程序。js可以小得多。

components-loader.js:
Vue.component('example-component', function (resolve) {
  require(['./exampleFunctionality/exampleComponent'], resolve);
});

app.js:
require("./components/components-loader");

创建文件夹 /public/chunkswebpack.mix.js放在最后:

.webpackConfig({
    output: {
        chunkFilename: `chunks/[name]${mix.config.inProduction ? '[chunkhash].chunk.js' : '.chunk.js'}`,
        publicPath: '/',
    },
});

现在,如果您运行npm run dev/prod,组件的一个文件夹将是一个块,而webpack仅在使用时将文件拉到浏览器。虽然有点延迟,但在我看来是值得的。

然后在刀片视图中只使用根组件。

@extends(layouts.app)
@section('content')
   <example-component :prop1="asdasd" :prop2="basdasd"></example-component>
@endsection

这可能不是最好的方法,但它对我很有效。

 类似资料:
  • Laravel中的刀片模板是否有类似Smarty的截断修改器? 我知道我可以在模板中写出实际的php,但我正在寻找更好的东西来编写(我们不要讨论整个php是一个模板引擎)。 例如,我在寻找这样的东西: 我知道我可以通过作曲家使用像树枝这样的东西,但我希望Laravel本身具有内置功能。 如果没有,可以像Smarty提供的那样创建自己的可重用修饰符。我喜欢Blade不会过度使用所有语法,但我认为tr

  • 问题内容: 我正在阅读Laravel Blade 文档,但无法弄清楚如何在模板内分配变量以供以后使用。我不能这样做,因为那会回显“任何内容”,而我不希望那样。 我知道我可以做到,但这并不优雅。 在Blade模板中是否有更好,更优雅的方法来做到这一点? 问题答案: 不建议在视图中进行操作,因此没有刀片标签。如果您确实想在刀片视图中执行此操作,则可以在编写时打开一个php标签,也可以注册一个新的刀片标

  • 我正在为一个在Laravel中完成的站点编写代码,我知道不建议在Blade模板中编写PHP代码,但在这个例子中,我的可用时间有限。 中间的PHP代码不起作用?

  • 我正在Laravel中构建一个小型CMS,我试图显示内容(存储在数据库中)。它显示超文本标记语言标记,而不是执行它们。就像所有打印数据都有自动html_entity_decode。 我试着用大括号打印内容。 和三个卷曲的大括号。 它们给出了相同的结果。我需要执行那些HTML标记,而不是转义它们。

  • 我发现非常奇怪的情况。我有一些结果的集合,我想抓住每个结果保存在缓存信息。为此,我有一个缓存类,它有一个静态函数get()。不幸的是,我没有收到任何东西,当我在我的刀片模板的Foreach循环中调用它。 如果我在控制器内调用相同的函数,则显示所需的信息,但与上面的示例不同。 为什么呢?

  • 在我的观点中,我扩展了一个刀片模板,它充当我的主模板。我有一个ViewComposer设置,它为这个模板提供了许多变量。 我遇到了一种情况,需要在是启动函数的页面。 通过ViewComposer传递的变量是否达到初始视图的范围?或者我需要创建另一个ViewComposer来传递相同的变量。 这最终给了我一个未定义的变量错误。