在编写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. 20165223 《信息安全系统设计基础》 改进ls的实现

    课下作业:改进ls的实现 一.作业要求 参见附图,改进你的ls的实现.提交代码运行截图和码云链接.

  2. PEP8 - Python编码规范

    PEP8 - Python编码规范 PEP8 规范 官方文档:https://www.python.org/dev/peps/pep-0008/ PEP8 规范 中文翻译:http://www.cnb ...

  3. [SDOI2017]遗忘的集合

    [SDOI2017]遗忘的集合 综合了很多套路的题 一看就是完全背包 生成函数! 转化为连乘积形式 Pi....=F 求Ln! 降次才可以解方程 发现方程是: f[i]=∑t|i : bool(t)* ...

  4. EC20 R2.1

    1.模块开机成功前WAKEUP_IN. NET_MODE. BT_CTS. COEX_UART_TX(背部焊盘). COEX_UART_RX(背部焊盘) 和WLAN_EN(背部焊盘)引脚禁止上拉. 2 ...

  5. 【Sublime Text】sublime text 安装插件方法总结

    #使用Package Control组件安装插件 1.安装Package Control组件 按 Ctrl+` 调出console(注:避免热键冲突,可以在界面上操作  View-show conso ...

  6. java 打印空心菱形的两种实现

    第一种实现方式: //打印给定行数的空心菱形 public static void draw(int size){ if (size % 2 == 0) //如果是偶数行变为奇数 { size++; ...

  7. javascript 获取字符递增

    比如A->B,AA->AB,Z->AA 参考https://blog.csdn.net/xiaotao2004/article/details/75096607 C#版本,改写为ja ...

  8. [算法竞赛入门经典]Message Decoding,ACM/ICPC World Finals 1991,UVa213

    Description Some message encoding schemes require that an encoded message be sent in two parts. The ...

  9. python和Java的几种容器比较

    python里面有几种常用的容器用来存放数据 1.list 列表,在python中没有数据类型,所以可以在列表中存放各种类型的数据,比如把Java里面的整型和字符串放在一个容器里面如下所示 list ...

  10. 网络结构---从alexnet 到resnet

    AlexNet-> vgg vgg 采用更小的卷积核,加深网络深度,但两者的共同点都是卷积层+pooling层最后接上fc 层的结构 Network in network ->google ...