Vue动态创建组件方法
一、Vue的动态引入组件;
有的时候不知道引入什么组件,要根据数据的类型来引入不同的组件,这个时候就需要动态组件
动态组件
1、用法 :is = 'component-name'
2、用途 需要根据数据,动态渲染的场景。即组件类型不明确
父组件
<component :is="nextTiceName" />"
:is 后边是组件名,是一个变量,本例子中变量为 nextTiceName,然后 nextTiceName 返回了 组件名,变量可以函数返回或者根据数据处理返回;
数据中
import NextTick from '@/components/nextTice'
export default {
components: {
NextTick
},
data() {
nextTiceName: 'NextTick'
}
}
二、异步组件
有的时候一个组件特别大,而且不是初始化的时候才需要,特定时候才需要这时候就要异步加载
1、import 函数
2、按需加载,异步加载大组件
父组件
<FormDemo v-if="formDate" />
在这里 formDate 控制这个组件是否显示,例如特定点击才显示此组件;正常我们是 import 引入函数,但是这里就不通过 import 了,直接在 components 里面注册
export default {
components: {
FormDemo: () => import('../components/formDemo')
}
}
三、组件缓存 keep-alive
1、频繁切换,不需要重复渲染
2、这是Vue的一个性能优化地方
例如:tab页,tab1 tab2 tab3,tab2显示的话tab1就会destory,tab3显示tab2就会destory,这个时候来回切换影响内存,就要用到keep-alive
四、组件混合 mixin
1、多个组件有相同的逻辑。抽离出来
2、mixin 并不完美,会有一些问题 vue3的composition Api旨在解决这些问题
写法:例如新建一个 mixin.js文件
export default {
// 多个组件公用的逻辑,数据处理,方法都可以写在这里面
data() {
return {
name: '城市'
}
},
methods: {
showName() {}
},
mounted(){}
}
父组件中引入:
import myMixin from './mixin' export default {
mixins: [myMixin], // 可以添加多个
data() {
return {}
}
}
这样将多个组件复用的逻辑都写在mixin里面,那里要哪里引入就行;和类似写一个公用js文件是一个原理
mixin问题
、变量来源不明确,不利于阅读
、多命名mixin 可能会造成命名冲突
五、动态创建组件的例子
组件写好之后有的时候需要动态创建组件。例如:
编辑文章页面,正文是一个富文本编辑器,富文本编辑器是一个第三方的组件,点击添加章节的时候需要动态的创建一个富文本编辑器这个时候怎么处理呢。
富文本编辑器也就是第三方的组件,需要绑定一个值就跟input一样,但是其他的和平常都是一样的,根据这个特点我们就可以使用Vue的for循环去动态创建例如
<div>
<quill-editor
v-model="item.content"
style="min-height: 150px;background: #fff;"
v-for="item in items"
class="editer">
</quill-editor>
</div>
<div class="addClass_box">
<span @click="addTravel()">+ 新增章节</span>
</div>
quill-editor 这个是个组件,直接循环出来就行,至于组件所绑定的值,循环出来绑定进去就行。
import { quillEditor } from 'vue-quill-editor' export default {
components: {
quillEditor
},
data () {
return {
items: [{
component: quillEditor,
content: ''
}]
}
},
methods: {
addTravel(){
this.items.push({
component: quillEditor,
content: ''
})
}
}
}
点击添加的时候把items这个数组扩张就行了。
Vue动态创建组件方法的更多相关文章
- vue 动态创建组件(运行时创建组件)
function mountCmp (cmp, props, parent) { if (cmp.default) { cmp = cmp.default } cmp = Vue.extend(cmp ...
- Angular动态创建组件之Portals
这篇文章主要介绍使用Angular api 和 CDK Portals两种方式实现动态创建组件,另外还会讲一些跟它相关的知识点,如:Angular多级依赖注入.ViewContainerRef,Por ...
- angular4 动态创建组件 vs 动态创建模板
实现 模拟场景:页面上"帮助"按钮的点击触发帮助文档的弹出框,且每个页面的帮助文档不一样 因此弹出框里的帮助文档是一个动态模板而不是动态组件 以下comp均代表Type类型的动态 ...
- 动态创建组件TEdit
//动态创建组件TEdit procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftSt ...
- Delphi动态创建组件,并释放内存
开发所用delphi版本是xe2,效果图如下: 代码如下: ---------------------------------------------------------------------- ...
- Vue之创建组件之配置路由!
Vue之创建组件之配置路由!== 第一步: 当然就是在我们的试图文件夹[views]新建一个文件夹比如home 在home文件夹下面新建一个文件index.vue 第二步:在router目录下做如下事 ...
- vue.js 创建组件 子父通信 父子通信 非父子通信
1.创建组件 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...
- Delphi 动态创建组件,单个创建、单个销毁
效果图如下: 实现部分代码如下: var rec: Integer = 0; //记录增行按钮点击次数 implementation {$R *.dfm} //动态释放单个组件内存,即销毁组件 pro ...
- OAF 动态创建组件以及动态绑定属性
在开发中,我们遇到以下一个需求. 一个表格左侧有5列是固定存在的,右侧有N列是动态生成的,并且该N列中第一列可输入,第二列是不可编辑的,但是是数字,如果小于0,那么就要显示为红色,重点标识出来. 首先 ...
随机推荐
- plsql developer 64位版本
plsql developer 64位版本 http://www.3322.cc/soft/15748.html
- "未能载入文件或程序集“XXX”或它的某一个依赖项。系统找不到指定的文件"的解决方式
今天在写反射调用的时候失败了,经过调试和分析,终于攻克了,以下我就详细说明. 一,报错的现象 未能载入文件或程序集"DalSQL"或它的某一个依赖项.系统找不到指定的文件. 说明: ...
- 【OI】向量&矩阵乘法
何为向量? 在初中课本中,我们知道: 向量是有大小和方向的量. 这样解释太笼统了,现在我们只讨论平面上的向量. 那么,我们约定:在平面上的向量,由一个二元组组成:如α(c1,c2). 在此平面上建立一 ...
- Linux 下Python调用C++编写的动态库
在工程中用到使用Python调用C++编写的动态库,结果报如下错误: OSError: ./extract_str.so: undefined symbol: _ZNSt8ios_base4InitD ...
- java Map 转 List
public static void testMapVoid () { Map map = new HashMap(); map.put("a", "a1"); ...
- sql server的版本检查
https://support.microsoft.com/en-ph/help/321185/how-to-determine-the-version-edition-and-update-leve ...
- 在Docker Hub上你可以很轻松下载到大量已经容器化的应用镜像,即拉即用——daocloud国内镜像加速
Docker之所以这么吸引人,除了它的新颖的技术外,围绕官方Registry(Docker Hub)的生态圈也是相当吸引人眼球的地方. 在Docker Hub上你可以很轻松下载到大量已经容器化的应用镜 ...
- geronimo
时间限制 1s 空间限制 512MB 3.1 题目描述 "Geronimo∼" 时间还很多,让我们慢慢来. 不如听首开心的歌再看题?-- 算了,直接看题吧. 给定一个整数 n,以及 ...
- 杂项:BPM
ylbtech-杂项:BPM 1.返回顶部 1. BPM,即业务流程管理,是一种以规范化的构造端到端的卓越业务流程为中心,以持续的提高组织业务绩效为目的的系统化方法,常见商业管理教育如EMBA.MBA ...
- JavaGraphics类的绘图方法
Graphics类提供基本绘图方法,Graphics类提供基本的几何图形绘制方法,主要有:画线段.画矩形.画圆.画带颜色的图形.画椭圆.画圆弧.画多边形.画字符串等. 1. 画线段:在窗口中画一条线段 ...