Vue中通过Vue.extend动态创建实例的方法


Posted in Javascript onAugust 13, 2019

在Vue中,如果我们想要动态地来控制一个组件的显示和隐藏,比如通过点击按钮显示一个对话框或者弹出一条信息。我们通常会提前写好这个组件,然后通过v-if = “show”来控制它的显示隐藏。如下所示:

<div>
    <button @click = "show = !show">弹出</button>
    <span v-if = "show">这是一条通过按钮控制显示隐藏的信息</span>  
  </div>

另外还有一种实现方法就是通过Vue.extend来动态地创建实例,在想要进行显示的时候创建实例。 

在需要隐藏的时候删除这个实例。

1.通过Vue.extend创建构造器,这个构造器用于需要显示是创建实例。

const Constructor = Vue.extend({
  template:` <span>{{message}}</span> `,
  data(){
    return {
      message:'这是一条通过按钮控制显示隐藏的信息'
    }
  }
})
1.需要显示时创建实例
showHandle(){
  const MessageCom = this.MessageCom = new Constructor({
    propsData:{
      show:true
    }
  }).$mount();

  this.$refs.message.appendChild(MessageCom.$el);
}
1.需要隐藏时删除实例
hiddenHandle(){
  this.MessageCom.$el.remove()
  this.MessageCom.$destroy()
  this.MessageCom = null
}

这样的话就同样实现了一个显示,隐藏效果。

使用场景

通过上面的分析,我们发现这种操作完全没有必要,相比于通过属性来控制显示和隐藏;创建实例显得更加麻烦。
 但是它同样具有一定的使用场景。比如:单元测试时:

单元测试

在进行单元测试时,为了实现在Vue中的测试,我们必须创建一个基于某个组件的实例,然后才能进行测试。
 如下所示:

it('可以设置icon.', () => {
    const Constructor = Vue.extend(Button)
    const vm = new Constructor({
    propsData: {
      icon: 'settings'
    }
    }).$mount()
    const useElement = vm.$el.querySelector('use')
    expect(useElement.getAttribute('xlink:href')).to.equal('#i-settings')
    vm.$destroy()
  })

替代DOM操作

在一些场合下,我们可能需要创建一个div这种,通常的实现方式如下:

let oDiv = document.createElement();
oDiv.innerHTML = 'hello,world';
document.body.appendChild(oDiv);

但是,在Vue中操作DOM是非常不推荐的写法,这时候我们建议使用Vue.extend来实现DOM的操作。

const Constructor = Vue.extend(Toast);
   let oDiv = new Constructor();
   oDiv.$slots.default = [message];
   oDiv.$mount(); //必须使用$mount()进行挂载,否则所有的生命周期的函数都不会执行
   document.body.appendChild(oDiv.$el)

总结:

Vue.extend可以用于动态地创建实例,在一些场景下可以使用。

以上所述是小编给大家介绍的Vue中通过Vue.extend动态创建实例,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
Jquery AJAX POST与GET之间的区别
Nov 14 Javascript
node.js正则表达式获取网页中所有链接的代码实例
Jun 03 Javascript
jQuery仿gmail实现fixed布局的方法
May 27 Javascript
详解页面滚动值scrollTop在FireFox与Chrome浏览器间的兼容问题
Dec 03 Javascript
微信小程序(六):列表上拉加载下拉刷新示例
Jan 13 Javascript
JS实现多级菜单中当前菜单不随页面跳转样式而发生变化
May 30 Javascript
JavaScript中递归实现的方法及其区别
Sep 12 Javascript
vue项目打包部署到服务器的方法示例
Aug 27 Javascript
jQuery.validate.js表单验证插件的使用代码详解
Oct 22 jQuery
灵活使用console让js调试更简单的方法步骤
Apr 23 Javascript
JavaScript变量基本使用方法实例分析
Nov 15 Javascript
JS表格的动态操作完整示例
Jan 13 Javascript
微信小程序封装分享与分销功能过程解析
Aug 13 #Javascript
node删除、复制文件或文件夹示例代码
Aug 13 #Javascript
vue实现下拉加载其实没那么复杂
Aug 13 #Javascript
vue中created和mounted的区别浅析
Aug 13 #Javascript
微信小程序实现点击空白隐藏的方法示例
Aug 13 #Javascript
微信小程序使用npm包的方法步骤
Aug 13 #Javascript
Vue中的transition封装组件的实现方法
Aug 13 #Javascript
You might like
Windows中安装Apache2和PHP4权威指南
2006/11/18 PHP
php面向对象的用户登录身份验证
2017/06/08 PHP
使用JavaScript动态设置样式实现代码(2)
2013/01/25 Javascript
枚举的实现求得1-1000所有出现1的数字并计算出现1的个数
2013/09/10 Javascript
jquery+php实现搜索框自动提示
2014/11/28 Javascript
在父页面得到zTree已选中的节点的方法
2015/02/12 Javascript
jquery实现表单输入时提示文字滑动向上效果
2015/08/10 Javascript
jQuery实现鼠标经过时出现隐藏层文字链接的方法
2015/10/12 Javascript
jQuery实现form表单基于ajax无刷新提交方法详解
2015/12/08 Javascript
jqueryMobile使用示例分享
2016/01/12 Javascript
Bootstrap中点击按钮后变灰并显示加载中实例代码
2016/09/23 Javascript
使用Vue自定义数字键盘组件(体验度极好)
2017/12/19 Javascript
Vue+axios+WebApi+NPOI导出Excel文件实例方法
2019/06/05 Javascript
基于Taro的微信小程序模板消息-获取formId功能模块封装实践
2019/07/15 Javascript
构建Vue大型应用的10个最佳实践(小结)
2019/11/07 Javascript
JavaScript数值类型知识汇总
2019/11/17 Javascript
Vue使用Proxy代理后仍无法生效的解决
2020/11/13 Javascript
[47:02]2018DOTA2亚洲邀请赛3月29日 小组赛B组 VP VS paiN
2018/03/30 DOTA
python 切片和range()用法说明
2013/03/24 Python
Python2.7环境Flask框架安装简明教程【已测试】
2018/07/13 Python
Matplotlib使用字符串代替变量绘制散点图的方法
2020/02/17 Python
CSS3中31种选择器使用方法教程
2013/12/05 HTML / CSS
京东国际站:JOYBUY
2017/11/23 全球购物
印度化妆品购物网站:Nykaa
2018/07/22 全球购物
德国家具、照明、家居用品网上商店:Wayfair.de
2020/02/13 全球购物
为什么使用接口?
2014/08/13 面试题
一个大学生十年的职业规划
2014/01/17 职场文书
社区党务公开实施方案
2014/03/18 职场文书
测绘工程专业求职信
2014/07/15 职场文书
暑假学习心得体会
2014/09/02 职场文书
优秀教师先进材料
2014/12/16 职场文书
满月酒邀请函
2015/01/30 职场文书
博士生专家推荐信
2015/03/25 职场文书
公司客户答谢酒会祝酒词
2015/08/11 职场文书
2016年中秋祝酒词
2015/11/26 职场文书
「天才王子的赤字国家重生术」妮妮姆·拉雷粘土人开订
2022/03/21 日漫