我对symfony还是很陌生,并且对vue.js有所了解。经过一些研究,我无法找到解决问题的方法。
我有以下问题:
我正在使用Symfony和vue.js作为前端构建多页应用程序。我在模板index.html.twig
中使用搜索表单,以从API获取有关给定搜索查询的信息。
因此我在Symfony中使用路由。当点击搜索按钮时,URL xxx/search?query=test
被调用。该URL由我的symfony控制器处理,该控制器从API获取数据并呈现页面search-result.html.twig
。我在index.html.twig
中使用Vue.js,也想在search-result.html.twig
(以及其他路由和页面)中使用Vue,但是我不太确定如何在不同页面上使用不同的vue实例。
我希望我能够正确地描述问题!期待您的建议。
UPDATE:
这是我当前的基础结构:
base.html.twig(所有其他页面都继承自该模板):
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>{% block title %}Welcome!{% endblock %}</title>
{% block stylesheets %}
{{ encore_entry_link_tags('app') }}
{% endblock %}
</head>
<body>
<div id="app">
{% block body %}{% endblock %}
</div>
</body>
{% block javascripts %}
{{ encore_entry_script_tags('app') }}
{% endblock %}
</html>
这是我初始化vue实例的方式:
import Vue from 'vue';
import App from './App.vue';
new Vue({
render: h => h(App)
}).$mount('#app');
然后从App.vue中分派我的不同组件。
问题是:当我现在打开另一个树枝文件时,无法使用其他页面布局。
您可能想在Symfony应用程序中使用多个具有不同入口点的Vue-App。从外观上看,您必须在3个地方进行更改。根据详细信息,您可能还需要进行其他更改。
Webpack配置
这要求您将这些入口点添加到webpack.config.js
,例如通过添加searchApp的入口点。
您的vue“引导程序”文件
然后您必须为新应用复制app.js
(或问题中Vue片段的存储位置)并进行调整,例如而不是import App from './App.vue'
,您可以拥有import SearchApp from './SearchApp.vue'
(然后进一步向下更新App调用)。
您的模板
现在您的项目中应该有2个vue应用程序,并带有2个webpack入口点以加载其数据(CSS / JS)。您的base.html.twig
将使用入口点app
加载原始应用的javascript。现在,您必须告诉search-result.html.twig
用新入口点的文件覆盖这些文件(假设:searchApp
):
{% extends "base.html.twig" %}
{% block stylesheets %}{{ encore_entry_link_tags('searchApp') }}{% endblock %}
{% block javascripts %}{{ encore_entry_script_tags('searchApp') }}{% endblock %}
如果这些块之一包含一些共享资源,您还可以添加{{ parent() }}
调用以从base.html.twig加载它们,但是要小心,以免在JS调用中发生冲突。现在search-result.html.twig
应该加载新的Vue应用程序。现在,您可以根据需要更改该应用程序的布局,并且它不会打扰其他应用程序。