2016-02-07 3 views
4

Я работаю над проектом Laravel 5.2 с Laravel Spark (который все еще находится в бета-версии на момент написания статьи) и пытается добавить некоторую функциональность Vuejs, используя макеты и представления по умолчанию.Как добавить компонент Vuejs в приложение Laravel Spark?

Моя первая попытка не удалась, потому что я просто попытался создать новый div в домашнем виде и привязать код Vue к этому div. Вот div:

<div id="my-stuff"> 
     <p>@{{ test }}</p> 
    </div> 

А вот соответствующий JS код:

new Vue({ 
    el: '#my-stuff', 
    data: { 
     test: 'This is a test' 
    } 
}); 

То, что я ожидал увидеть, были слова «Это тест» появляется в этом DIV на главном экране, но, конечно, ничего не появилось, потому что, как уже упоминалось, Vue привязывается к div сразу после тега body (ну, я предполагаю, что это так или иначе).

Я думаю, что решение моей проблемы - использовать компоненты Vue, которые сами выглядят довольно просто, но я понятия не имею, куда поместить мой код, как интегрировать мой код с процессом Gulp, какой файл Spark мне нужно изменить (если есть?), чтобы зарегистрировать мой компонент и как обеспечить, чтобы мой компонент регистрировался до создания экземпляра Vue.

Любая помощь будет высоко оценена.

Добавление 1

Чтобы воспроизвести точно такую ​​же настройку, как я использую, можно было бы необходимо установить новую копию Laravel 5.2, а затем использовать свечу установки, чтобы добавить искры материал, то добавьте app.js, содержащий код ниже в папку public, добавьте соответствующий div в любом месте в окне home и добавьте тег скрипта, который будет содержать app.js прямо под тегом скрипта, который импортирует основной файл javascript, созданный gulp.

Хотя это непрактично воспроизвести, что все настройки в скрипке, я думаю, что следующий скрипку иллюстрирует суть проблемы:

https://jsfiddle.net/5oLLte2e/

Из памяти у вас есть такое же ограничение в AngularJS. Для меня вполне резонно, почему это не сработает, и решение в Vuejs, скорее всего, будет использовать компоненты, но проблема в этой ситуации - это знать, как связать компонент и где его сохранить, чтобы интегрировать его с глотком config, или если это даже необходимо.

+0

Vue должен быть привязан непосредственно к div, который вы указываете по значению 'el'. Можете ли вы воспроизвести скрипку? –

+0

Куда вы включаете свой скрипт vue? Он должен идти в теле, а не в голове. – gurghet

+0

@ DavidK.Hess Я создал скрипку, которая иллюстрирует суть проблемы и добавила ссылку на скрипку в вопросе. – JamesG

ответ

2

Vuejs Компонента

Если вы хотите иметь более одного VUE экземпляру короткий ответ: да, вам нужна компонента.

<div id="main-app"> 
<p>{{ mainMessage }}</p> 
    <my-app> 
     <p>Some composable content</p> 
    </my-app> 
</div> 

И сценарии должны быть загружены компоненты первого:

Vue.component('my-app', { 
    template: '<div>{{myMessage}}<br/><slot></slot></div>', 
    data: function() { 
    return { 
     myMessage: 'This is my message' 
    } 
    } 
}); 

new Vue({ 
    el: '#main-app', 
    data: { 
    mainMessage: 'This is the main module' 
    } 
}); 

Выход будет:

This is the main module 
This is my message 
Some composable content 

Вот скрипка: Components with Vue

Помните, что вы всегда можно поместить шаблон на страницу с помощью уникального идентификатора или, более идиоматически используя что-то вроде:

<script type="x/template" id="my-app"> 
    Your template here 
    {{ your component variables }} 
</script> 

Laravel Спарк Интеграция

шаги, чтобы добавить компонент в приложении Sparkified Laravel являются следующие:

(1) Добавьте замещающий HTML с пользовательский тег в любом месте страницы, даже если окружающий div уже был Vue-ified. HTML с пользовательским компонентом может выглядеть следующим образом:

<div id="example"> 
    <my-component></my-component> 
</div> 

(2) Реализация компоненты Vue и сохраните файл JavaScript в resources/assets/js. В качестве примера, мы можем сохранить следующий код в my-component.js:

var MyComponent = Vue.extend({ 
    data: function() { 
     return { message: 'This is a test' } 
    }, 

    template: '{{ message }}' 
}) 

Vue.component('my-component', MyComponent) 

new Vue({ 
    el: '#example' 
}) 

(3) Добавьте одну require заявление (вторая строка ниже) кода в resources/assets/js/app.js так, что файл выглядит следующим образом:

require('laravel-spark/core/bootstrap'); 
require('./my-component.js'); // This is the key! 

new Vue(require('laravel-spark')); 

Обратите внимание, что перед именем файла важно включить ведущий ./, иначе Browserify предположит, что он ищет модуль npm вместо необработанного файла и сработает.

(4) Запустите gulp и как только он закончит, обновите страницу. Gulp вызовет Browserify, который обрабатывает resources/assets/js/app.js, который теперь включает в себя наш пользовательский JavaScript, который будет обрабатываться и включен в окончательный файл public/js/app.js.

Если вы выполните эти шаги на чистой установке Laravel, у которой была процедура установки Spark (я сделал свои моды до home.blade.php), вы должны увидеть, что образец текста появляется на странице.

+0

Спасибо за ваш ответ - это определенно очень полезно. Тем не менее, значительная часть вопроса касается того, где разместить код JavaScript, и именно здесь приходит материал, связанный с искрой. Я сделал немного больше прогресса. Я обнаружил, что установщик Spark удаляет файл с именем app.js в папку ресурсов ресурсов/ресурсов/js, и это, по-видимому, является подходящим местом для загрузки моих компонентов, так как этот файл не будет перезаписан обновлениями композитора и уже настроен на то, чтобы его подхватили Elixir/gulp. Теперь мне нужно разработать правильный способ использования этого объекта. – JamesG

+0

BTW - Если я смогу решить эту последнюю часть головоломки, я добавлю это к вашему ответу и приму это, так как я очень ценю усилия, которые вы пытаетесь продемонстрировать стороне Vue. – JamesG

Смежные вопросы