在编写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. C#面向对象基本概念总结

    快过年了,发一篇自己的复习总结.以下内容均是个人理解,如文章有幸被浏览,如有错误的地方欢迎大家提出,相互学习相互进步! 面向对象三大基本特征:封装,继承,多态 一.类 (对象声明的三种方式:以普通基类 ...

  2. linux device drivers ch03

    ch03.字符设备驱动程序 编写驱动程序的第一步就是定义驱动程序为用户程序提供的能力(机制).接下来以scull(“Simple Character Utility for Loading Local ...

  3. 20175221 《Java程序设计》迭代和JDB(课下作业,选做):

    20175221 <Java程序设计> 迭代和JDB(课下作业,选做): 任务详情 1 使用C(n,m)=C(n-1,m-1)+C(n-1,m)公式进行递归编程实现求组合数C(m,n)的功 ...

  4. 第七周java学习总结

    学号 20175206 <Java程序设计>第七周学习总结 教材学习内容总结 第八章: 主要内容 String类 StringTokenizer类 Scanner类 StringBuffe ...

  5. 最大似然估计与期望最大化(EM)算法

    一.最大似然估计与最大后验概率 1.概率与统计 概率与统计是两个不同的概念. 概率是指:模型参数已知,X未知,p(x1) ... p(xn) 都是对应的xi的概率 统计是指:模型参数未知,X已知,根据 ...

  6. Python解析xml文档实战案例

    xml文档 <?xml version="1.0" ?> <!DOCTYPE PubmedArticleSet PUBLIC "-//NLM//DTD ...

  7. 分布式协调服务Zookeeper扫盲篇

    分布式协调服务Zookeeper扫盲篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 身为运维工程师对kubernetes(k8s)可能比较熟,那么etcd(go语言实现)分布式协 ...

  8. Kubernetes之dashboard

    部署dashboard $ wget https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommen ...

  9. docker 删除镜像

    有时候我们不需要某个镜像,需要对它进行删除.1.停止所有的container,这样才能够删除其中的images: docker stop $(docker ps -a -q) 如果想要删除所有cont ...

  10. BeautifulSoup爬网页图片

    #-*- coding: utf-8 -*- import urllib2 import urllib import os from BeautifulSoup import BeautifulSou ...