深入理解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 相关文章推荐
Jquery Validation插件防止重复提交表单的解决方法
Mar 05 Javascript
7个有用的jQuery代码片段分享
May 19 Javascript
JavaScript模拟实现键盘打字效果
Jun 29 Javascript
基于Jquery和html5实现炫酷的3D焦点图动画
Mar 02 Javascript
BootStrap的两种模态框方式
May 10 Javascript
微信小程序的分类页面制作
Jun 27 Javascript
js实现京东轮播图效果
Jun 30 Javascript
详解vue axios中文文档
Sep 12 Javascript
Vue.js划分组件的方法
Oct 29 Javascript
jQuery+SpringMVC中的复选框选择与传值实例
Jan 08 jQuery
vue-cli3脚手架的配置及使用教程
Aug 28 Javascript
nginx部署多个vue项目的方法示例
Sep 06 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
php实现的MySQL通用查询程序
2007/03/11 PHP
php图片缩放实现方法
2014/02/20 PHP
ThinkPHP Mobile使用方法简明教程
2014/06/18 PHP
Zend Framework教程之响应对象的封装Zend_Controller_Response实例详解
2016/03/07 PHP
jquery+json实现的搜索加分页效果
2010/03/31 Javascript
Javascript 面向对象 重载
2010/05/13 Javascript
JS的replace方法介绍
2012/10/20 Javascript
Javascript 垃圾收集机制介绍理解
2013/05/14 Javascript
使用jquery动态加载js文件的方法
2014/12/24 Javascript
JS动态修改表格cellPadding和cellSpacing的方法
2015/03/31 Javascript
每天一篇javascript学习小结(RegExp对象)
2015/11/17 Javascript
JS折半插入排序算法实例
2015/12/02 Javascript
jquery对复选框(checkbox)的操作汇总
2016/01/13 Javascript
html+js实现简单的计算器代码(加减乘除)
2016/07/12 Javascript
Javascript typeof与instanceof的区别
2016/10/18 Javascript
Jquery Easyui表单组件Form使用详解(30)
2016/12/19 Javascript
jQuery插件FusionCharts绘制的2D条状图效果【附demo源码】
2017/05/13 jQuery
angular $watch 一个变量的变化(实例讲解)
2017/08/02 Javascript
js中getBoundingClientRect的作用及兼容方案详解
2018/02/01 Javascript
基于Webpack4和React hooks搭建项目的方法
2019/02/05 Javascript
Vue循环遍历选项赋值到对应控件的实现方法
2020/06/22 Javascript
python实现2048小游戏
2015/03/30 Python
python取余运算符知识点详解
2019/06/27 Python
python opencv 图像拼接的实现方法
2019/06/27 Python
python自动识别文本编码格式代码
2019/12/26 Python
浅谈tensorflow中Dataset图片的批量读取及维度的操作详解
2020/01/20 Python
使用python创建Excel工作簿及工作表过程图解
2020/05/27 Python
Prototype如何更新局部页面
2013/03/03 面试题
实习生自我鉴定范文
2013/12/05 职场文书
创业计划书六个要素
2013/12/26 职场文书
2014春晚主持词
2014/03/25 职场文书
请假条怎么写
2014/04/10 职场文书
2014年餐厅服务员工作总结
2014/11/18 职场文书
部队2015年终工作总结
2015/04/02 职场文书
廉洁自律承诺书范文
2015/04/28 职场文书
(开源)微信小程序+mqtt,esp8266温湿度读取
2021/04/02 Javascript