深入理解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 相关文章推荐
多广告投放代码 推荐
Nov 13 Javascript
jquery设置元素的readonly和disabled的写法
Sep 22 Javascript
深入分析Cookie的安全性问题
Mar 01 Javascript
JavaScript操作class和style样式代码详解
Feb 13 Javascript
ReactNative页面跳转实例代码
Sep 27 Javascript
js通过classname来获取元素的方法
Nov 24 Javascript
原生js仿淘宝网商品放大镜效果
Feb 28 Javascript
基于JavaScript实现的希尔排序算法分析
Apr 14 Javascript
js实现从左向右滑动式轮播图效果
Jul 07 Javascript
快速搭建vue2.0+boostrap项目的方法
Apr 09 Javascript
详解angular脏检查原理及伪代码实现
Jun 08 Javascript
vue获取form表单的值示例
Oct 29 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技巧与注意事项分析
2011/02/03 PHP
php与Mysql的一些简单的操作
2015/02/26 PHP
Laravel 5.4向IoC容器中添加自定义类的方法示例
2017/08/15 PHP
PHP中的Iterator迭代对象属性详解
2019/04/12 PHP
使用laravel指定日志文件记录任意日志
2019/10/17 PHP
JavaScript 组件之旅(二)编码实现和算法
2009/10/28 Javascript
js自执行函数的几种不同写法的比较
2012/08/16 Javascript
jquery中的过滤操作详细解析
2013/12/02 Javascript
javascript间隔定时器(延时定时器)学习 间隔调用和延时调用
2014/01/13 Javascript
Javascript中浮点数相乘的一个解决方法
2014/06/03 Javascript
Node.js学习入门
2017/01/03 Javascript
JavaScript两个变量交换值的实现方法
2017/03/01 Javascript
vue项目总结之文件夹结构配置详解
2017/12/13 Javascript
快速解决vue-cli不能初始化webpack模板的问题
2018/03/20 Javascript
vue富文本编辑器组件vue-quill-edit使用教程
2018/09/21 Javascript
layui 监听select选择 获取当前select的ID名称方法
2019/09/24 Javascript
vue自定义组件实现双向绑定
2021/01/13 Vue.js
[01:05:52]DOTA2-DPC中国联赛 正赛 Ehome vs Aster BO3 第一场 2月2日
2021/03/11 DOTA
python 打印出所有的对象/模块的属性(实例代码)
2016/09/11 Python
python3.6使用pickle序列化class的方法
2018/10/22 Python
Python Gitlab Api 使用方法
2019/08/28 Python
浅谈keras2 predict和fit_generator的坑
2020/06/17 Python
html5 canvas 实现光线沿不规则路径运动
2020/04/20 HTML / CSS
Herschel美国官网:背包、手提袋及配件
2020/03/10 全球购物
软件设计的目标是什么
2016/12/04 面试题
违纪检讨书2000字
2014/02/08 职场文书
《鸟岛》教学反思
2014/04/26 职场文书
集中整治工作方案
2014/05/01 职场文书
小学教学工作总结2015
2015/05/13 职场文书
2016年社区国庆节活动总结
2016/04/01 职场文书
大学生各类奖学金申请书
2019/06/24 职场文书
Nginx访问日志及错误日志参数说明
2021/03/31 Servers
Nginx实现高可用集群构建(Keepalived+Haproxy+Nginx)
2021/05/27 Servers
mysql 数据插入优化方法之concurrent_insert
2021/07/01 MySQL
python基础之类方法和静态方法
2021/10/24 Python
基于Python编写简易版的天天跑酷游戏的示例代码
2022/03/23 Python