wepy2.0 "TypeError: Cannot read property 'hooks' of undefined"

 

在使用 wepy2.0 的时候,遇到这种报错,整个系统崩溃

先说解决方案:

找到 :\node_modules\@wepy\core\dist\wepy.js 第 2261 行

也就是这个位置
function patchLifecycle (output, options, rel, isComponent) {
  var initClass = isComponent ? WepyComponent : WepyPage;
  var initLifecycle = function () {
    ...
    if (!isComponent) {
      vm.$root = vm;
      vm.$app = app;
    }
    ...
  }
}

改成 

  if (!isComponent) {
    vm.$root = vm;
    vm.$app = app;
- } 
+ }else if (!vm.$app) {
+   vm.$app = app;
+ }

再重新编译的时候就不会出现这种bug了。

再说解决的 思路:

打开 控制台提示 的 vender.js 1821 行

function callUserHook (vm, hookName, arg) {
  console.log(vm)
  var pageHook = vm.hooks[hookName];
  var appHook = vm.$app.hooks[hookName];

  var result = arg;

  // First run page hook, and then run app hook
  // Pass page hook result to app hook
  // If return undefined, then return default argument
  [ pageHook, appHook ].forEach(function (fn) {
    if (isFunc(fn)) {
      result = fn.call(vm, result);
      if (isUndef(result)) {
        result = arg;
      }
    }
  });

  return result;
}

查看 打印的 vm

对比之下,发现 正是 没有 

$app 属性,导致的 

var appHook = vm.$app.hooks[hookName];

报错,代码停止运行

顺着代码往上找,发现 是在 这里定义了 vm

function patchLifecycle (output, options, rel, isComponent) {

  var initClass = isComponent ? WepyComponent : WepyPage;
  var initLifecycle = function () {
    ...
    if (!isComponent) {
      vm.$root = vm;
      vm.$app = app;
    }
    ...
   }
}

那只需要给 vm 额外的增加 $app 就 ok 了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值