深入理解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 相关文章推荐
用脚本调用样式的几种方法
Dec 09 Javascript
几个javascript操作word的参考代码
Oct 26 Javascript
基于jQuery的360图片展示实现代码
Jun 14 Javascript
Bootstrap实现响应式导航栏效果
Dec 28 Javascript
可输入文字查找ajax下拉框控件 ComBox的实现方法
Oct 25 Javascript
原生js开发的日历插件
Feb 04 Javascript
JavaScript中transform实现数字翻页效果
Mar 08 Javascript
JavaScript运动框架 多物体任意值运动(三)
May 17 Javascript
Vue组件Draggable实现拖拽功能
Dec 01 Javascript
vue.js实现会动的简历(包含底部导航功能,编辑功能)
Apr 08 Javascript
vue柱状进度条图像的完美实现方案
Aug 26 Javascript
vue中的过滤器及其时间格式化问题
Apr 09 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制作unicode解码工具(unicode编码转换器)代码分享
2013/12/24 PHP
PHP中常用的输出函数总结
2014/09/22 PHP
比较详细的javascript对象的property和prototype是什么一种关系
2007/08/06 Javascript
JS 日期验证正则附asp日期格式化函数
2009/09/11 Javascript
jQuery插件实现屏蔽单个元素使用户无法点击
2013/04/12 Javascript
JS关键字球状旋转效果的实例代码
2013/11/29 Javascript
JS实现n秒后自动跳转的两种方法
2020/11/30 Javascript
Bootstrap表单布局样式源代码
2016/07/04 Javascript
使用jQuery加载html页面到指定的div实现方法
2016/07/13 Javascript
react开发教程之React 组件之间的通信方式
2017/08/12 Javascript
Vue2.0父组件与子组件之间的事件发射与接收实例代码
2017/09/19 Javascript
JS实现带导航城市列表以及输入搜索功能
2018/01/04 Javascript
create-react-app构建项目慢的解决方法
2018/03/14 Javascript
使用webpack搭建react开发环境的方法
2018/05/15 Javascript
javascript显示动态时间的方法汇总
2018/07/06 Javascript
jQuery-ui插件sortable实现自由拖动排序
2018/12/01 jQuery
关于layui的下拉搜索框异步加载数据的解决方法
2019/09/28 Javascript
JS面向对象编程实现的Tab选项卡案例详解
2020/03/03 Javascript
JavaScript Window浏览器对象模型原理解析
2020/05/30 Javascript
JavaScript冒泡算法原理与实现方法深入理解
2020/06/04 Javascript
vue-i18n实现中英文切换的方法
2020/07/06 Javascript
简单介绍Python中的try和finally和with方法
2015/05/05 Python
Python制作钉钉加密/解密工具
2016/12/07 Python
Python使用迭代器捕获Generator返回值的方法
2017/04/05 Python
Python模块文件结构代码详解
2018/02/03 Python
python读取txt文件中特定位置字符的方法
2018/12/24 Python
详解js文件通过python访问数据库方法
2019/03/03 Python
pyqt5中QThread在使用时出现重复emit的实例
2019/06/21 Python
Python 的字典(Dict)是如何存储的
2019/07/05 Python
html5组织文档结构_动力节点Java学院整理
2017/07/11 HTML / CSS
2014学校庆三八妇女节活动总结
2014/03/01 职场文书
2015年七一建党节演讲稿
2015/03/19 职场文书
第一军规观后感
2015/06/12 职场文书
运动会开幕式致辞
2015/07/29 职场文书
开学随笔
2015/08/15 职场文书
Python中常见的导入方式总结
2021/05/06 Python