• 技术文章 >web前端 >js教程

    Vue生命周期、手动挂载及挂载子组件

    小云云小云云2018-05-22 16:02:17原创2157
    本文主要和大家介绍Vue生命周期和手动挂载,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。

    1、vue的生命周期:

    2、$mount()手动挂载

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

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

    例如:

    方法一:

    <p id="app"> 
     {{name}} 
    </p> 
    <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生命周期是什么

    以上就是Vue生命周期、手动挂载及挂载子组件的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:组件 手动 周期
    上一篇:js数组和对象的深浅拷贝详解 下一篇:登录注册框手机号和验证码校验实现代码
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【腾讯云】年中优惠,「专享618元」优惠券!• 18个常见angular面试题(附答案分析)• JavaScript的Symbol类型、隐藏属性及全局注册表详解• 什么是消息队列?node中如何使用消息队列?• 浅析IDEA中如何开发Angular• 整理总结JavaScript常见的BOM操作
    1/1

    PHP中文网