在使用 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 了