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 ответов
- Создайте свое "приложение" для каждой страницы в отдельных файлах JS. Хорошей практикой было бы использовать то же имя, что и имя страницы, чтобы понять, где оно принадлежит.
- имя основного div совпадает с именем файла (fileName.php + assets/js / fileName.в JS).
- использовать
#fileName' as your
el' - в лезвие использовать
@{{ 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>