在编写Vue页面的时候,会碰到这么一个需求。由于页面组件比较多,不可能一次性将所有的页面都打包,只能按需获取相应的页面进行显示。

比如有一个App页面,需要异步获取html片段通过v-html指令加载到content这个组件中。

<div id='app'>
<content v-html='html' />
<input type='button' @click='appendContent' >appendContent</input>
</div> <script type="text/x-template" id='content-template'>
<div class='content' v-html='html'> </div>
</script>

APP JS:

var content = Vue.components('content',{
props:['html'],
template:'#content-template'
}); var app = new Vue({
el:'#app',
data:{
html:''
},
methods:{
appendContent:function() {
$.ajax({
type:'GET',
url:'content.html'
success:function(response){
this.html = response;
}
});
}
}
});

组件

<div id='content'>
<test1 />
<test2 />
</div> <script type="text/x-template" id='test1-template'>
<div>Test 1 Component</div>
</script> <script type="text/x-template" id='test2-template'>
<div>Test 2 Component</div>
</script> <script>
var test1 = {
template:'#test1-template'
}; var test2 = {
template:'#test2-template'
}; var subcontent = new Vue({
el:'#content',
components:{
'test1':test1,
'test2':test2,
}
});
</script>

但是实际执行的时候会发现,组件没能正确渲染。折腾了一通,发现原来v-html指令原来有个坑,插入片段的时候,js代码无法执行

因此需要改变一下执行顺序。

  • 1.将组件拆分成html和js两个文件。
  • 2.先用ajax读取html文件。
  • 3.成功获取html文件后,通过require获取js文件。

修改后的代码如下(注:只是示例,不代表能跑得通):

主界面 html
<div id='app'>
<content v-html='html' />
<input type='button' @click='appendContent' >appendContent</input>
</div> <script type="text/x-template" id='content-template'>
<div class='content' v-html='html'> </div>
</script> 主界面 js var content = Vue.components('content',{
props:['html'],
template:'#content-template'
}); var app = new Vue({
el:'#app',
data:{
html:''
},
methods:{
appendContent:function() {
$.ajax({
type:'GET',
url:'content.html'
success:function(response){
this.html = response;
require(['content'],function(){});
}
});
}
}
}); 组件 html
<div id='content'>
<test1 />
<test2 />
</div> <script type="text/x-template" id='test1-template'>
<div>Test 1 Component</div>
</script> <script type="text/x-template" id='test2-template'>
<div>Test 2 Component</div>
</script> 组件 js <script>
var test1 = {
template:'#test1-template'
}; var test2 = {
template:'#test2-template'
}; var subcontent = new Vue({
el:'#content',
components:{
'test1':test1,
'test2':test2,
}
});
</script>

  

【Vue】动态加载Html片段的更多相关文章

  1. vue动态加载组件

    vue动态加载组件,可以使用以下方式 <component :is="propertyname" v-for="tab in tabs"></ ...

  2. Vue动态加载异步组件

    背景: 目前我们项目都是按组件划分的,然后各个组件之间封装成产品.目前都是采用iframe直接嵌套页面.项目中我们还是会碰到一些通用的组件跟业务之间有通信,这种情况下iframe并不是最好的选择,if ...

  3. vue动态加载图片,取消格式验证

    vue 一. 动态加载图片 (以vue模板为例) app.vue 代码如下: <template> <div id="app"> <img :src= ...

  4. vue实践---vue动态加载组件

    开发中遇到要加载10个或者更多的,类型相同的组件时,如果用普通的 import 引入组件,components注册组件,代码显得太啰嗦了,这时候就需要用到 require.context 动态加载这些 ...

  5. VUE 动态加载组件的四种方式

    动态加载组件的四种方式: 1.使用import导入组件,可以获取到组件 var name = 'system'; var myComponent =() => import('../compon ...

  6. Vue 动态加载组件

    为什么要动态加载呢?而不是一次性加载呢? 一次性?你能保证你拿的内容不多,那从性能方面说还是OK的.否则,就该什么时候用,就什么时候取. 得出这想法,源于前几天上班赶产品的故事: A组件是父亲,B组件 ...

  7. Vue动态加载图片图片不显示

    图片是放在assets文件夹下的 使用require进行解决 图片不显示的原因 在webpack,将图片放在assets中,会将图片图片来当做模块来用,因为是动态加载的,所以url-loader将无法 ...

  8. vue 动态加载图片路径报错解决方法

    最近遇到图片路径加载报错的问题 之前一直都是把图片放到assets的文件下的.总是报错,看到一些文章并且尝试成功了,特意记录下 首先先说明下vue-cli的assets和static的两个文件的区别, ...

  9. vue动态加载图片

    如果是直接动态获取完整的图片地址可以使用以下方法 <template> <img :src="url"> </template> <scr ...

随机推荐

  1. flink部署操作-flink standalone集群安装部署

    flink集群安装部署 standalone集群模式 必须依赖 必须的软件 JAVA_HOME配置 flink安装 配置flink 启动flink 添加Jobmanager/taskmanager 实 ...

  2. Python3下POST请求HTTPS链接

    Python 3.5.2 + Windows 7环境下 第一种:http.client方式 def http_client_post(): conn = http.client.HTTPSConnec ...

  3. js制作可拖拽可点击的悬浮球

    兼容mouse事件和touch事件,支持IE9及其以上 效果展示:https://jsfiddle.net/shifeng/7xebf3u0/ // index.html <!DOCTYPE h ...

  4. [Reinforcement Learning] Policy Gradient Methods

    上一篇博文的内容整理了我们如何去近似价值函数或者是动作价值函数的方法: \[ V_{\theta}(s)\approx V^{\pi}(s) \\ Q_{\theta}(s)\approx Q^{\p ...

  5. mui框架中dialog框的实现

    <script type="text/javascript" charset="utf-8"> //mui初始化 mui.init({ swipeB ...

  6. 第31月第17天 resolveInstanceMethod

    1. #import "UIView+Test.h" #import <objc/runtime.h> @implementation UIView (Test) + ...

  7. 使用以太网通信方式刷新AB PLC固件

    本文详细介绍如何使用以太网通信方式刷新AB PLC固件 一.准备工作 1.  AB PLC控制器一台,本文以5069-L330ER为例,将其通电: 2.  5069-L330ER的IP已设置为172. ...

  8. C# 动态调用 webservice 的类

    封装这个类是为之后使用 webservice 不用添加各种引用了. using System; using System.Collections.Generic; using System.Compo ...

  9. 【4】学习C++之内存管理

    单个内存申请及释放: int *p = new int; if(p == NULL) { //内存分配失败 //异常处理 } delete p; p = NULL; 内存块的申请及释放: ]; if( ...

  10. C#创建 WebApi 项目

    做web api 可以参考一下网友 C#进阶系列——WebApi 接口参数不再困惑:传参详解 - 懒得安分 - 博客园https://www.cnblogs.com/landeanfen/p/5337 ...