我相信很多人都有自己喜欢使用框架,我也不例外,对于Vue真的是深有感触...

也许是Vue的渐进式,让人学习使用比较方便,而且在使用Vue-cli脚手架之后,更是对这个模式比较偏爱,用的比较多,也试着自己写了不少,学习的不是特别深入,以此记录我的学习.

 

初识Vue生命周期

Vue有自己的生命周期,现在网上旧版生命周期与官方文档最新生命周期还有些许不同.
先来看看网上常见的生命周期图示:

 

  • beforeCreate
 数据观测(data observer),也就是在这个时候开始监控data中的数据变化了,之后开始初始化事件(Init Events)
  • created

  现在开始判断vue对象中是否已经el挂载节点,或者还有另外一种vm.#mount() 是否已经挂载,之后的逻辑就是开始判断是否有模板

  有模板就编译数据到vue生成的html模板中

  • beforeMount

  (此时还未将vue生成的html模板渲染到页面中)

  开始对指定的el节点将vue生成的html替换到指定位置

  • mounted

  挂载完成,已经完后了html模板渲染到页面,而且这个钩子函数只会执行一次,通常在这里进行数据请求,可以调用钩子函数

    this.$nextTick(function () {
       //进行请求数据的方法,可以调用方法  eg:

      this.getMyData()

    })

  • beforeUpdate

  这个钩子函数主要是随时监听数据变化,实时更新dom

  • updated

  数据更新后的钩子函数

  • beforeDestroy

  vue实例销毁函数, 拆卸监听和子模板,以及事件监听

  • destroyed

  vue实例已经被销毁,vue方法中改变数据已经不再更新dom

 

再来看看新的官方文挡中的略有不同的生命周期图

可以明显看出来,新的生命周期中先初始化事件和生命周期

之后开始第一个钩子beforeCreate之后初始化注入和反应


 

每次一扒

  闲着没事扒了扒vue源码,在vue入口是自执行函数利用全局对象来挂载vue实例.

  之后慢慢找到了声明生命周期函数名字的数组:

var LIFECYCLE_HOOKS = [
'beforeCreate',
'created',
'beforeMount',
'mounted',
'beforeUpdate',
'updated',
'beforeDestroy',
'destroyed',
'activated',
'deactivated',
'errorCaptured'
];

接下来开始配置vue,暂且不提..

  // vue中对是否可以使用__proto__进行判断环境(我理解,因为规范是浏览器环境用的__proto__,在js和node中没有,开发过程中可以自己玩)
  var hasProto = '__proto__' in {};

 

  接着是对运行环境的判断

  我也从中看到了weex,毕竟weex利用vue搭建,不过分,哈哈

  // Browser environment sniffing
  var inBrowser = typeof window !== 'undefined';
  var inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform;
  var weexPlatform = inWeex && WXEnvironment.platform.toLowerCase();
  var UA = inBrowser && window.navigator.userAgent.toLowerCase();
  var isIE = UA && /msie|trident/.test(UA);
  var isIE9 = UA && UA.indexOf('msie 9.0') > 0;
  var isEdge = UA && UA.indexOf('edge/') > 0;
  var isAndroid = (UA && UA.indexOf('android') > 0) || (weexPlatform === 'android');
  var isIOS = (UA && /iphone|ipad|ipod|ios/.test(UA)) || (weexPlatform === 'ios');
  var isChrome = UA && /chrome\/\d+/.test(UA) && !isEdge;

  看了源码我才发现  原来firefox浏览器对象原型自己有watch方法,涨了姿势

  // Firefox has a "watch" function on Object.prototype...
  var nativeWatch = ({}).watch;

  接下来好多配置  ,,,以后慢慢写给自己理解,未完待续!!!