Таргетинг и управление одним элементом DOM в vue
Почему-то я все еще не могу обернуть голову вокруг некоторых основных концепций Vue.
Я сделал несколько простых веб-страниц, используя phalcon. Создал его так, чтобы он работал без JS, и теперь пришло время добавить некоторые навороты - запросы ajax и тому подобное, чтобы пользовательский опыт стал лучше.
Я хотел сделать все, используя vue, чтобы увидеть, как все это складывается. Но после долгих поисков я все еще не могу найти решение для самых простых задач.
Скажем: я хочу получить текстовый абзац из серии
Я знаю, что мог бы выполнять итерацию с помощью v-for, но эти элементы уже находятся в DOM, взяты из базы данных и созданы с помощью вольт. У меня даже была эта дикая идея создания файлов.js из phalcon, но это полностью отрицало бы мою стратегию создания функциональной веб-страницы, а затем постепенно улучшало ее.
Честно говоря, сейчас я чувствую, что слишком усложняюсь ради этого. Подходит ли Vue для такого проекта или это исключительно инструмент для создания приложений с нуля?
2 ответа
Шаблонирование Vue на стороне клиента, что означает, что если вы предоставляете уже шаблонную html-страницу (вашим бэкэндом), мало что может сделать для вас vue. Vue нужны данные, а не элементы DOM для построения своих моделей представления.
Это становится довольно очевидным, например, при создании одностраничного приложения, которое будет отображаться только на стороне клиента. Вы просто загружаете данные асинхронно из API-интерфейса сервера (например, REST), а затем выполняете весь рендеринг на клиенте.
Насколько я понимаю ваш сценарий использования, вы хотите смешать рендеринг на стороне клиента и сервера, рендеринг большей части неинтерактивного контента с использованием шаблонизатора вашего бэкенда и добавление некоторой интерактивности с использованием vue. В этом случае вам нужно добавить некоторые компоненты vue (с их собственной логикой рендеринга) в шаблон бэкэнда и передать данные этому компоненту, используя привязку данных vue.
Вот пример:
...
<div id="app">
<my-vue-list :products="{% products %}"></my-vue-list>
</div>
...
И в вашем JS:
var app = new Vue({
el: '#app',
data: {
components: {MyVueList} // You will have to register all the components you want to use here
}
})
Vue предоставляет атрибут ref для регистрации ссылки на элемент dom или дочерний компонент:
// accessible via this.$refs.foo
<li ref="foo">...</li>
Обратите внимание, однако, что ссылки не являются реактивными, как указано в документации:
$ refs также не реагирует, поэтому вы не должны пытаться использовать его в шаблонах для привязки данных.