如何在 Laravel 5.3 中使用 Vue.js 2.0 组件中的外部 html 模板

How to use external html templates in Components with Vue.js 2.0 in Laravel 5.3

我正在使用默认的 Laravel 5.3 安装程序 - 使用 Vue.js 2.0 默认配置的全新安装。

使用 Laravel 5.1 和 Vue.js 1.x,我可以轻松定义组件,并使用 browserify 进行编译。

Vue.component('test-component', require('./test-component');  

/*  test-component.js */
export default{
    template:require('./test-component.template.html')
}

/* test-component.template.html  */
<div class="test-component">
    <h1> Test Component <h1>
</div>  

但是,对于 Vue 2,默认值为 webpack(尽管 browserify 也可用,但无法正常工作,webpack 似乎更好)。但是我无法使配置正常工作。

我尝试了各种配置,最后在我的 gulp.js 文件中有了这个

const elixir = require('laravel-elixir');
require('laravel-elixir-vue-2'); 

var config = {

    module:{
        loaders:[
            {
                test: /\.html$/,
                loader: 'vue-loader'
            }
        ]
    }
};
elixir(mix => {
    mix.sass('app.scss')
       .webpack('app.js',null, null, config);
});  

现在我在编译 gulp webpack 时没有收到任何错误,但是当我尝试在浏览器中查看页面时,它不显示组件并且在控制台中有一个 error/warn

vue.js?3de6:513[Vue warn]: invalid template option:[object Object] 
(found in component <test>)

vue.js?3de6:4085Uncaught TypeError: Cannot read property 'child' of null(…)  

我的app.js主入口文件(默认由Laravel提供)

require('./bootstrap');

Vue.component('test-component', require('./components/test-component'));

const app = new Vue({
    //el: '#app',
}).$mount('#app');  

我错过了什么?任何指针将不胜感激。

在您的 gulp 文件中试试这个:

 const elixir = require('laravel-elixir');
 require('laravel-elixir-vue-2');

 elixir(mix => {
     mix.webpack('app.js');
 });

然后像这样导入你的组件:

import Test from './Components/Test.vue';

Vue.component('test', Test);
  1. 您必须使用 html-loader 而不是 vue-loader

    npm install html-loader --save-dev
    
  2. 你的gulpfile.js(需要改loader):

    const config = {
      module: {
        loaders:[{
          test: /\.html$/,
          loader: 'html'
        }]
      }
    };
    
    elixir((mix) => {
      mix.sass('app.scss')
        .webpack('app.js', null, null, config);
    });
    
  3. 你的test-component.js(没有变化,你可以开始了):

    export default {
      template: require('./test-component.template.html')
    }
    
  4. 您的test-component-template.html:(没有变化,一切顺利)

    <div class="test-component">
      <h1>Test Component Goes Here</h1>
    </div>
    

重要

  1. 定义组件的方法如下:

    • 使用默认值

      Vue.component('test-component', require('./test-component').default);
      
    • 或者,简单地使用 ES2015 import

      import TestComponent from './test-component';
      
      Vue.component('test-component', TestComponent);