Flask template+Vue +项目中include引入其他模版(其他模版也会用到vue)的使用探索

项目背景是:团队的历史项目,是flask tmeplate写的前段页面。然后我在一个页面A.html中引入了vue文件,使用了vue+element_ui技术。现在想在此A页面中插入另外一个页面B.html的内容(试图tab分开),因为入口只有A页面作为入口,想要在B.html中实现不同与A的功能。

尝试1,html文件中可以存在多个vue实例

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="{{ url_for('static', filename='js/vue.js') }}" type="text/javascript"></script><script src="{{ url_for('static', filename='js/axios.min.js') }}" type="text/javascript"></script><!-- 引入样式 --><link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css"><!-- 引入组件库 --><script src="https://unpkg.com/element-ui/lib/index.js"></script>
</head>
<body>
{{done}}<div id="app"><h1>{{ "{{" }} msg {{ "}}" }}</h1><div>hello</div></div><div id="app-body"><h4>{{ "{{" }} title {{ "}}" }}</h4><div>hello</div></div><div class="app-footer"><h4>{{ "{{" }} footer {{ "}}" }}</h4><div>hello</div></div><script>const vm = new Vue({el: '#app',data: function () {return {msg: "前段vue使用",}}});
</script><script>const vmBody = new Vue({el: '#app-body',data: function () {return {title: "vue实例2"}}});
</script><script>const vmFooter = new Vue({el: '.app-footer',data: function () {return {footer: "vue实例3",}}});
</script>
</body>
</html>

前端:

但是全都写到一起,虽然可以分为两个vue实例来处理,但是不想两个功能的html代码和vue代码参和在一个文件中,导致一个文件太大太乱。 

尝试2,可以通过 flask template的jinjia语法 include来引入外部模块 (注意此种用法不是很大众,出现了问题,并未解决,急需大牛帮我看看问题所在,不胜感激!!)

比如在A.html中的某个位置

{% include './new_module/B.html' %}

导入B的内容。A.html内容如下:

div id="order"><el-tabs type="border-card" v-model="active_tab_name"><el-tab-pane name="pc_side"><span slot="label" class="order_tab_title"><i class="el-icon-s-platform
"></i> A部门工单申请</span><div id="main_index">  A页面的主要内容</div>
</el-tab-pane><el-tab-pane  name=""><span slot="label" class="order_tab_title"><i class="el-icon-search
"></i> B部门工单申请</span>{% include './order_manage/param_test.html' %}</el-tab-pane></el-tabs>

注意:导入的内容是无法解析<script>标签的。若B.html的内容如下存在script标签。


<div id="param_order_search"><div><el-form ref="form" :model="form" label-width="80px"><el-form-item label="活动名称"><el-input v-model="form.name"></el-input></el-form-item><el-form-item><el-button type="primary" @click="is_test_method()">立即创建sss</el-button><el-button type="primary" @click="bye_msg='bye2bye2'">立即创建222</el-button><el-button>取消</el-button></el-form-item></el-form></div><div>再见再见 {{"{{"}} bye_msg {{"}}"}}</div>
</div><script>var create_param_search = new Vue({el: "#param_order_search",data: function () {return {sub_msg: "感谢阅读",bye_msg: "bye bye",form:{name:"参数名称"}}},mounted:function (){console.log("create_param_search mounted")this.is_test_method()},methods:{is_test_method(){console.log("is_test_method")}}})
</script>

出现的错误如下: 

vue.js:634 [Vue warn]: Error compiling template:

Templates should only be responsible for mapping the state to the UI. Avoid placing tags with side-effects in your templates, such as <script>, as they will not be parsed

于是想了迂回的方法:使用 template 的jinjia方法:macro

如是B.html变为:

<div id="param_order_search"><div><el-form ref="form" :model="form" label-width="80px"><el-form-item label="活动名称"><el-input v-model="form.name"></el-input></el-form-item><el-form-item><el-button type="primary" @click="is_test_method()">立即创建sss</el-button><el-button type="primary" @click="bye_msg='bye2bye2'">立即创建222</el-button><el-button>取消</el-button></el-form-item></el-form></div><div>再见再见 {{"{{"}} bye_msg {{"}}"}}</div>
</div>{% macro create_param_search() %}var create_param_search = new Vue({el: '#param_order_search',data: function () {return {sub_msg: "感谢阅读",bye_msg: "bye bye",form:{name:"参数名称"}}},template:"#tem",mounted:function (){console.log("create_param_search mounted")is_test_method()},methods:{is_test_method(){console.log("is_test_method")}}})
{% endmacro %}

在A.html的scipt中(与第一个vue实例一起的script中)

于是A.html的script变为:

 <script>{% from "./order_manage/param_test.html" import create_param_search %}{{ create_param_search() }}var order= new Vue({el: "#order",data: {........
</script>

页面也能正常加载

查看页面源码,发现B.hmtl的代码已经加载进入A.html中,但是控制台查看元素中button中是没有绑定相关click代码的。

  <el-tab-pane ><span slot="label" class="order_tab_title"><i class="el-icon-search
"></i> B部门工单申请</span><div id="param_order_search"><div><el-form ref="form" :model="form" label-width="80px"><el-form-item label="活动名称"><el-input v-model="form.name"></el-input></el-form-item><el-form-item><el-button type="primary" @click="is_test_method()">立即创建sss</el-button><el-button type="primary" @click="bye_msg='bye2bye2'">立即创建222</el-button><el-button>取消</el-button></el-form-item></el-form></div><div>再见再见 {{ bye_msg }}</div>
</div>......<script>var create_param_search = new Vue({el: '#param_order_search',data: function () {return {sub_msg: "感谢阅读",bye_msg: "bye bye",form:{name:"参数名称"}}},mounted:function (){console.log("create_param_search mounted")is_test_method()},methods:{is_test_method(){console.log("is_test_method")}}})var order= new Vue({el: "#order",data: {......
</script>

但是出现了问题:方法无法调用!!!至今没找到解决办法

点击页面的按钮,方法没有被调用,隐约觉得原因是因为include加载模块后渲染没有识别vue的代码写法丢弃了。但是为啥能识别elment_ui的写法呢?不解....

尝试3,使用import导入script vue代码,然后vue实例加载template模版

此种方法B.html内容是:


<template id="param_order_search"><div ><div><el-form ref="form" :model="form" label-width="80px"><el-form-item label="活动名称"><el-input v-model="bye_msg"></el-input></el-form-item><el-form-item><el-button type="primary" @click="is_test_method()">立即创建sss</el-button><el-button type="primary" @click="bye_msg='bye2bye2'">立即创建222</el-button><el-button>取消</el-button></el-form-item></el-form></div><div>再见再见 {{"{{"}} bye_msg {{"}}"}}</div>
</div>
</template>{% macro create_param_search() %}var create_param_search = new Vue({el: '#param_order_search_top',data: function () {return {sub_msg: "感谢阅读",bye_msg: "bye bye",form:{name:"参数名称"}}},mounted:function (){console.log("create_param_search mounted")this.is_test_method()},methods:{is_test_method(){console.log("is_test_method")}}})
{% endmacro %}

 A.html中展示B内容的区域的代码为:

 <div id="param_order_search_top">下面是挑战性内容哦!!<create_param_search></create_param_search></div>.......<script>{% from "./order_manage/param_test.html" import create_param_search %}{{ create_param_search() }}var order= new Vue({el: "#order",data: {
.....

结果就是报错:

Unknown custom element: <create_param_search> - did you register the component correctly? For recursive components, make sure to provide the "name" option.

(found in <Root>)

应该是 模版渲染+vue解析 时机和import代码解析时机是有时差的,所以导致没发现import的vue代码

尝试4:目前看下来是可行的。使用iframe来加载B.html到A.html中,b。html中写html代码及js代码。

可参考我的另外一篇博客:

Flask template中使用iframe-CSDN博客 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/257932.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

No suitable driver found for jdbc:mysql://localhost:3306(2023/12/7更新)

有两种情况&#xff1a; 压根没安装下载了但没设为库或方法不对 大多数为第一种情况&#xff1a; 一. 下载jdbc 打开网址选择一个版本进行下载 https://nowjava.com/jar/version/mysql/mysql-connector-java.html 二.安装jdbc 在项目里建一个lib文件夹 在把之前下载的jar文…

免费的数据采集软件,最新免费的几款数据采集软件【2024】

在当今数字化时代&#xff0c;数据是企业决策和业务发展的关键。而如何高效获取数据成为许多企业和研究机构的关注焦点。本文将深入探讨数据采集软件的种类。帮助大家选择最适合自己需求的数据采集工具。 数据采集软件种类 在众多数据采集软件中&#xff0c;有一类强大而多样…

《一念关山》热度破万,爱奇艺古装赛道出尽风头

​刘诗诗重回古装剧、新式武侠公路片、质感细腻的镜头美学......看点满满的《一念关山》频频登上热搜&#xff0c;俘获了大批观众的心。 开播首日热度就刷新了爱奇艺2023年站内纪录&#xff0c;《一念关山》作为2023年爱奇艺在古装赛道的收官之作&#xff0c;口碑和热度兼收。…

RHEL网络服务器

目录 1.时间同步的重要性 2.配置时间服务器 &#xff08;1&#xff09;指定所使用的上层时间服务器。 (2&#xff09;指定允许访问的客户端 (3&#xff09;把local stratum 前的注释符#去掉。 3.配置chrony客户端 &#xff08;1&#xff09;修改pool那行,指定要从哪台时间…

LV.12 D24 陀螺仪实验 学习笔记

一、陀螺仪实验代码分析 设置GPB_2引脚和GPB_3引脚功能为I2C传输引脚 #include "exynos_4412.h"/****************MPU6050内部寄存器地址****************/#define SMPLRT_DIV 0x19 //陀螺仪采样率&#xff0c;典型值&#xff1a;0x07(125Hz) #define CONFIG 0x1A…

SAP UI5 walkthrough step9 Component Configuration

在之前的章节中&#xff0c;我们已经介绍完了MVC的架构和实现&#xff0c;现在我们来讲一下&#xff0c;SAPUI5的结构 这一步&#xff0c;我们将所有的UI资产从index.html里面独立封装在一个组件里面 这样组件就变得独立&#xff0c;可复用了。这样&#xff0c;无所什么时候我…

基于SpringBoot+Vue学生成绩管理系统前后端分离(源码+数据库)

一、项目简介 本项目是一套基于SpringBootVue学生成绩管理系统&#xff0c;主要针对计算机相关专业的正在做bishe的学生和需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目可以直接作为bishe使用。 项目都经过严格调试&#xff0c;确…

为“异常”努力是值得的

异常是OO语言处理错误的方式,在C中&#xff0c;鼓励使用异常。侯捷再书中谈起异常&#xff0c;“十年前撰写“未将异常考虑在内的”函数是为一种美好实践&#xff0c;而今我们致力于写出“异常安全码”。”可见异常安全的重要。 说起异常安全&#xff0c;首先就要是异常的出现…

自定义GPTs的Actions 调用外部API测试 返回API的结果:成功

我的自定义GPT&#xff1a;https://chat.openai.com/g/g-sOqIFZgIy-superbrain 效果&#xff1a;chatGPT调用我的天气接口返回天气。 可以看见把json结果变成md格式(人方便阅读)了。与物理世界连接成功&#xff0c;太强大了。 我建的测试示例&#xff1a;https://3.wjsou.…

王炸升级!PartyRock 10分钟构建 AI 应用

前言 一年一度的亚马逊云科技的 re:Invent 可谓是全球云计算、科技圈的狂欢&#xff0c;每次都能带来一些最前沿的方向标&#xff0c;这次也不例外。在看完一些 keynote 和介绍之后&#xff0c;我也去亲自体验了一些最近发布的内容。其中让我感受最深刻的无疑是 PartyRock 了。…

物联网+AI智慧工地云平台源码(SaaS模式)

智慧工地云平台充分运用数字化技术&#xff0c;聚焦施工现场岗位一线&#xff0c;依托物联网、互联网、AI等技术&#xff0c;围绕施工现场管理的人、机、料、法、环五大维度&#xff0c;以及施工过程管理的进度、质量、安全三大体系为基础应用&#xff0c;实现全面高效的工程管…

spring IOC介绍

spring的Ioc真是个好东西啊&#xff0c;那它到底是什么东西呢&#xff0c;控制反转&#xff0c;到底是怎么转的呢&#xff1f; 假设啊你现在是一个导演&#xff0c;想排部戏&#xff0c;那是不是得需要演员和舞台(spring中的bean)&#xff0c;如果按平常的编程思维就是new 一个…