Рубрики
Без рубрики

Как пройти переменные экземпляра Rails в составляющие Vue

Gareth Fuller, как пройти переменные экземпляров Rails в Vue Componenti, которые в настоящее время работают с устаревшим приложением Rails. Мы медленно переходите на внешний вид от Rairs View в приложение Vue. В рамках этого перехода у нас есть некоторые элементы, которые мы хотим превратиться в глобальную Vue

Автор оригинала: FreeCodeCamp Community Member.

Гарет Фуллер

В настоящее время я работаю с устаревшим заявлением Rails. Мы медленно переходите на внешний вид от Rairs View в приложение Vue.

В рамках этого перехода у нас есть некоторые элементы, которые мы хотим превратиться в глобальные компоненты Vue. Мы хотим быть в состоянии использовать эти компоненты в наших существующих видах рельсов и в пределах приложения Vue, не настраивая каждого компонента для обработки обеих ситуаций.

Прежде чем разделить свое решение этой проблемы, вот пример единственного файлового Vue компонента, который мы хотим иметь возможность использовать в обоих сценариях (Rails View и Vue Application):

// Payments.vue

Но как насчет использования его в рельсы?

Решение

Так что решение для использования Оплаты. Вью Компонент в рельсах выглядит так:

// app/views/payments/index.haml
.global-comp  = content_tag 'comp-wrapper', nil, data: { component: 'payments', props: { payments: @payments } }.to_json

Давайте сломаем этот элемент вниз.

.global-comp это div (с классом "Global-comp") для монтажа суперпроманного экземпляра Vue. Этот экземпляр VUE дает нам компонент обертки для использования под названием Compwrapper.Vue (Мы доберемся до того, что Comprapprapper за минуту).

Вот экземпляр Vue, установленный на .global-comp :

// app/javascript/packs/global_comp.js
import Vue from 'vue/dist/vue.esm'import CompWrapper from './CompWrapper'
document.addEventListener('DOMContentLoaded', () => {  const app = new Vue({    components: { CompWrapper }  }).$mount('.global-comp')})

Все это делает компонент ( compwrapper.vue ) Доступно для нас в Div с классом Global-Comp Отказ

Если вы используете WebPacker С рельсами вам нужно будет включить этот пакет в рамках вашего макета где-то перед закрытием тега тела. Например:

// app/views/layouts/application.haml
...
= javascript_pack_tag "global_comp"

Compwrapper.Vue.vue.

Это веселая часть. Compwrapper.Vue позволяет нам пройти:

  1. Название компонента, которое мы хотим использовать, например, «Платежи»
  2. Реквизиты, которые мы хотим перейти к нему

Вся целью этого компонента оболочки состоит в том, чтобы позволить нам передать переменные экземпляров Rails, как @payments в наши компоненты как реквизит без необходимости обрабатывать это из каждого компонента, такого как Оплаты. Вью.

Так вот Compwrapper.Vue :

// app/javascript/CompWrapper.vue

Первое, что делает компонент Compwrapper, - это принимает атрибуты данных, которые вы устанавливаете на элементе в представлении Rails, разбирая JSON и устанавливая внутренний атрибут данных VUE с аналитическими данными:

created() {  this.data = JSON.parse(this.$attrs.data)}

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

И это все!

Теперь мы можем использовать компоненты Vue, поскольку они предназначены для использования, но из наших видов рельсов. ?