深入理解Vue生命周期、手动挂载及挂载子组件


Posted in Javascript onSeptember 27, 2017

本文介绍了Vue生命周期和手动挂载,分享给大家,具体如下:

1、vue的生命周期:

深入理解Vue生命周期、手动挂载及挂载子组件

2、$mount()手动挂载

当Vue实例没有el属性时,则该实例尚没有挂载到某个dom中;

假如需要延迟挂载,可以在之后手动调用vm.$mount()方法来挂载。

例如:

方法一:

<div id="app"> 
 {{name}} 
</div> 
<button onclick="test()">挂载</button> 
<script> 
 var obj= {name: '张三'} 
 var vm = new Vue({ 
  data: obj
 }) 
 function test() { 
  vm.$mount("#app"); 
 }

方法二:

Vue.extend()用以创建没有挂载的的子类,可以使用该子累创建多个实例

var app= Vue.extend({ 
 template: '<p>{{firstName}} {{lastName}}</p>', 
   data: function () { 
    return { 
    firstName: 'Walter', 
    lastName: 'White' 
    } 
    } 
   }) 
 // 创建 app实例,并挂载到一个元素上。 
 new app().$mount('#app')

下面我们使用自动插入label

手动挂载插件:https://vuefe.cn/api/#Vue-extend

动手写代码

1、先移除user-name.vue 里显示错误的label,因为我们要手动插入

<label class="label label-danger">用户不合法</label>

2、先看一下我们插件validate.js的全部代码,然后我们再分析

export default{
  install(Vue){

    Vue.prototype.checkUserName = (value) => {
      if(value == ""){
        return true; // 如果没有填写,默认为true
      }

      if(/\w{6,20}/.test(value)){
        return true;
      }else{
        return false;
      }
    }

    Vue.prototype.errorLabel = null;
    Vue.prototype.hasError = false;

    Vue.directive("uname",{
      bind(){
        let errorTpl = Vue.extend({
          template:'<label class="label label-danger">用户不合法</label>'
        });
        // 实例化并挂载
        Vue.errorLabel = (new errorTpl()).$mount().$el;
      },
      update(el,binding,vnode){
        if(/\w{6,20}/.test(el.value)){
          // 验证通过
          if (Vue.hasError){
            el.parentNode.removeChild(Vue.errorLabel);
            Vue.hasError = !Vue.hasError;
          }
        }else{
          // 验证没有通过
          if (!Vue.hasError){
            el.parentNode.appendChild(Vue.errorLabel);
            Vue.hasError = ! Vue.hasError;
          }

        }
      },
    })
  }
}

3、定义了2个prototype

Vue.prototype.errorLabel = null;
Vue.prototype.hasError = false;

errorLabel错误提示模板,我们在要bind() 方法中创建,然后挂载到它上面;hasError 是辅助属性,方便我们用来判断当前是有错误还是没有错误。

4、在update() 方法中,实时监听用户的输入,然后移除/添加 错误模板

update(el,binding,vnode){
   if(/\w{6,20}/.test(el.value)){
     // 验证通过
     if (Vue.hasError){
       el.parentNode.removeChild(Vue.errorLabel);
       Vue.hasError = !Vue.hasError;
     }
   }else{
     // 验证没有通过
     if (!Vue.hasError){
       el.parentNode.appendChild(Vue.errorLabel);
       Vue.hasError = ! Vue.hasError;
     }
   }
 },

5、演示效果如下图

深入理解Vue生命周期、手动挂载及挂载子组件

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
[JS源码]超长文章自动分页(客户端版)
Jan 09 Javascript
js取得url地址参数实例
Feb 22 Javascript
JavaScript移除数组内重复元素的方法
Mar 18 Javascript
js结合正则实现国内手机号段校验
Jun 19 Javascript
javascript日期格式化方法汇总
Oct 04 Javascript
JS中如何比较两个Json对象是否相等实例代码
Jul 13 Javascript
AngularJs  Creating Services详解及示例代码
Sep 02 Javascript
全面解析node 表单的图片上传
Nov 21 Javascript
如何判断出一个js对象是否一个dom对象
Nov 24 Javascript
js仿微信语音播放实现思路
Dec 12 Javascript
JS数组操作中的经典算法实例讲解
Jul 26 Javascript
详解基于Vue,Nginx的前后端不分离部署教程
Dec 04 Javascript
微信小程序中button组件的边框设置的实例详解
Sep 27 #Javascript
使用javaScript实现鼠标拖拽事件
Apr 03 #Javascript
vue-cli项目中怎么使用mock数据
Sep 27 #Javascript
javaScript实现复选框全选反选事件详解
Nov 20 #Javascript
javaScript实现滚动条事件详解
Mar 24 #Javascript
详解vue-cil和webpack中本地静态图片的路径问题解决方案
Sep 27 #Javascript
深入掌握 react的 setState的工作机制
Sep 27 #Javascript
You might like
德生BCL3000的电路分析和打磨
2021/03/02 无线电
php封装的smartyBC类完整实例
2016/10/19 PHP
如何让您的中波更粗更长 - 中波框形天线制作
2021/03/10 无线电
JavaScript constructor和instanceof,JSOO中的一对欢喜冤家
2009/05/25 Javascript
js鼠标点击事件在各个浏览器中的写法及Event对象属性介绍
2013/01/24 Javascript
javascript 表格内容排序 简单操作示例代码
2014/01/03 Javascript
document.forms用法示例介绍
2014/06/26 Javascript
jQuery实现简单的tab标签页效果
2016/09/12 Javascript
jQuery生成假加载动画效果
2016/12/01 Javascript
AngularJS实现页面定时刷新
2017/03/14 Javascript
js实现音频控制进度条功能
2017/04/01 Javascript
iview table高度动态设置方法
2018/03/14 Javascript
vue2.x集成百度UEditor富文本编辑器的方法
2018/09/21 Javascript
vue 中 beforeRouteEnter 死循环的问题
2019/04/23 Javascript
公众号SVG动画交互实战代码
2020/05/31 Javascript
Python中的Numeric包和Numarray包使用教程
2015/04/13 Python
Python表示矩阵的方法分析
2017/05/26 Python
浅谈numpy中linspace的用法 (等差数列创建函数)
2017/06/07 Python
Python 反转字符串(reverse)的方法小结
2018/02/20 Python
Python3.6.0+opencv3.3.0人脸检测示例
2018/05/25 Python
如何通过雪花算法用Python实现一个简单的发号器
2019/07/03 Python
django 数据库连接模块解析及简单长连接改造方法
2019/08/29 Python
简单了解Python多态与属性运行原理
2020/06/15 Python
Python基于内置函数type创建新类型
2020/10/22 Python
德国电子商城:ComputerUniverse
2017/04/21 全球购物
介绍一下JNDI的基本概念
2013/07/26 面试题
客服实习的个人自我鉴定
2013/10/20 职场文书
大学生求职信范文应怎么写
2014/01/01 职场文书
巾帼志愿者活动方案
2014/08/17 职场文书
2014年感恩节活动策划方案
2014/10/06 职场文书
开幕式邀请函
2015/01/31 职场文书
可怜妈妈观后感
2015/06/09 职场文书
老兵退伍感言
2015/08/03 职场文书
2016年过年放假安排通知
2015/08/18 职场文书
Python 实现绘制子图及子图刻度的变换等问题
2021/05/31 Python
JS前端监控采集用户行为的N种姿势
2022/07/23 Javascript