Vuejs js для нескольких страниц, а не для одного приложения страницы

мне нужно создать приложение с помощью laravel 5.3 и vuejs 2, потому что мне нужно использовать двустороннюю привязку, а не использовать jquery.

мне нужно настроить представления с шаблонами лезвий. Затем, мне нужно использовать vuejs на каждой странице, как указано ниже.

ресурсы / утверждает/js / компоненты / список.vue

<script>
    const panel = new Vue({
        el: '#list-panel',
        name: 'list',
        data: {               
           message: 'Test message'
        },
        methods: {
            setMessage: function(){
                this.message = 'New message';
            }
        }
   })
</script>

ресурсы / утверждает / представления / сообщение / индекс.лезвие.в PHP

<div id="panel" class="panel panel-default">
    <div class="panel-heading">Posts</div>

    <div class="panel-body">
       <p>{{ message }}</p>
       <button v-on:click="setMessage">SET</button>
    </div>
</div>

там добавить.vue для создания.лезвие.PHP и др... вдобавок.вю el: '#add-panel'

Это мое приложение.js. Я уже прокомментировал код по умолчанию следующим образом.

Vue.component('list', require('./components/List.vue'));
Vue.component('add', require('./components/Add.vue'));

// const app = new Vue({
//     el: '#app'
// });

Я едва проверил большинство документов и учебников. Но они используют один файл JS. Они используют компоненты для небольших элементов с шаблоном, а не только js.

можно ли использовать vuejs таким образом? Мне нужно использовать приложение.js. Как лучше всего это сделать?

2 ответов


  1. Создайте свое "приложение" для каждой страницы в отдельных файлах JS. Хорошей практикой было бы использовать то же имя, что и имя страницы, чтобы понять, где оно принадлежит.
  2. имя основного div совпадает с именем файла (fileName.php + assets/js / fileName.в JS).
  3. использовать #fileName' as yourel'
  4. в лезвие использовать @{{ vue expressions }} чтобы Blade пропустил это и позволил VueJS справиться с этим.

сделано. Удачи!


если вы хотите посыпать немного vuejs в ваших файлах blade, у вас есть в основном два варианта:

#1

объявить глобальные компоненты Vue

пример

// in laravel built in app.js file

Vue.component('foo', require('./components/Foo.vue'));
Vue.component('bar', require('./components/Bar.vue'));

const app = new Vue({
    el: '#app'
});

создайте основной файл макета, где корневой div имеет идентификатор #app

// layout.blade.php

<html>
  <header></header>
  <body>
    <div id="app">
      @yield('content')
    </div>
  </body>
</html>

наконец-то в ваших представлениях:

//some-view.blade.php

@extends('layout')

@section('content')
 <foo :prop="{{ $someVarFromController }}"></foo>
@endsection
#2

это то, что я сейчас использую, и дает мне больше гибкости на самом деле

// in laravel built in app.js file

const app = new Vue({
    el: '#app',
    components: {
      Foo: require('./components/Foo.vue'),
      Bar: require('./components/Bar.vue')
    }
});

в файле макета вы будете использовать динамические компоненты vuejs

<html>
  <header></header>
  <body>
    <div id="app">
      @if (isset($component))
        <component :is={{ $component }} inline-template>
      @endif

         @yield('content')

     @if (isset($component))
       </component>
     @endif
    </div>
  </body>
</html>

в виде:

//some-view.blade.php

@extends('layout', ['component' => 'foo'])

@section('content')
   // all the vue stuff available in blade
   // don't forget to use the @ symbol every time you don't want blade to parse the expression.
  // Example: @{{ some.vue.propertie }}
@endsection

и, наконец, вы можете создать компоненты vue, как вы всегда бы

// resources/assets/js/components/foo.vue

<script>
export default {
 // the component
}
</script>