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

 

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

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

wepy2.0 wepy2.0

对比之下,发现 正是 没有 

$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 了

你可能感兴趣的:(前端)