深入理解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 相关文章推荐
你必须知道的JavaScript 变量命名规则详解
May 07 Javascript
jQuery中innerWidth()方法用法实例
Jan 19 Javascript
JavaScript编写简单的计算器
Nov 25 Javascript
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
Dec 15 Javascript
一次记住JavaScript的6个正则表达式方法
Feb 22 Javascript
jQuery实现模糊查询的方法分析
May 10 jQuery
vue-cli中vue本地实现跨域调试接口
Jan 16 Javascript
vue组件文档(.md)中如何自动导入示例(.vue)详解
Jan 25 Javascript
使用express来代理服务的方法
Jun 21 Javascript
Layui选项卡制作历史浏览记录的方法
Sep 28 Javascript
vue-cli创建的项目中的gitHooks原理解析
Feb 14 Javascript
Vue解决echart在element的tab切换时显示不正确问题
Aug 03 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&amp;java(一)
2006/10/09 PHP
php5数字型字符串加解密代码
2008/04/24 PHP
探讨php中防止SQL注入最好的方法是什么
2013/06/10 PHP
php实现邮件发送并带有附件
2014/01/24 PHP
迁移PHP版本到PHP7
2015/02/06 PHP
跨域表单提交状态的变相判断代码
2009/11/12 Javascript
js实现页面转发功能示例代码
2013/08/05 Javascript
jquery马赛克拼接翻转效果代码分享
2015/08/24 Javascript
jQuery form 表单验证插件(fieldValue)校验表单
2016/01/24 Javascript
阻止表单提交按钮多次提交的完美解决方法
2016/05/16 Javascript
JS中this上下文对象使用方式
2016/10/09 Javascript
js判断一个字符串是以某个字符串开头的简单实例
2016/12/27 Javascript
nodejs利用http模块实现银行卡所属银行查询和骚扰电话验证示例
2016/12/30 NodeJs
JS日程管理插件FullCalendar简单实例
2017/02/07 Javascript
footer定位页面底部(代码分享)
2017/03/07 Javascript
vue实现微信分享朋友圈,发送朋友的示例讲解
2018/02/10 Javascript
vue.js使用v-pre与v-html输出HTML操作示例
2018/07/07 Javascript
IE11下CKEditor在Bootstrap Modal中下拉问题的解决
2019/09/25 Javascript
微信小程序实现签到弹窗动画
2020/09/21 Javascript
在antd Form表单中select设置初始值操作
2020/11/02 Javascript
详解Python2.x中对Unicode编码的使用
2015/04/03 Python
python抓取并保存html页面时乱码问题的解决方法
2016/07/01 Python
python中如何使用正则表达式的非贪婪模式示例
2017/10/09 Python
JavaScript实现一维数组转化为二维数组
2018/04/17 Python
Python xpath表达式如何实现数据处理
2020/06/13 Python
CSS3五个技巧给你的网站带来出色的效果
2009/04/02 HTML / CSS
英国卫浴商店:Ergonomic Design
2019/09/22 全球购物
一套.net面试题及答案
2016/11/02 面试题
售后专员岗位职责
2013/12/08 职场文书
爱国卫生月活动总结范文
2014/04/25 职场文书
厂区绿化方案
2014/05/08 职场文书
小学校长汇报材料
2014/08/20 职场文书
党的群众路线教育实践活动查摆问题及整改措施
2014/10/10 职场文书
商场收银员岗位职责
2015/04/07 职场文书
撤诉申请书法院范本
2015/05/18 职场文书
详解MySQL 用户权限管理
2021/04/20 MySQL