我正在尝试创建一个Vue.js
组件,它允许我加载(使用PreloadJS
)并显示各种EaselJS
画布实验。Vue.js 组件:
EaselJS
使用 HTML 画布和 2 个用于实验脚本和库的 div 创建created
生命周期钩子:使用 (包含在主 HTML 文件中)加载EaselJS
库PreloadJS
- 将
EaselJS
lib 文件存储在#creatjLib
div中 - 然后它加载实验脚本文件并将它们存储在
#gameAssets
这是组件:
<template>
<div class="fullscreen">
<canvas id="canvas" class="fill"></canvas>
<div id="createjsLib" class="hidden"></div>
<div id="gameAssets" class="hidden"></div>
</div>
</template>
<script>
import {createjsList} from '../../assets/lists/games.js'
import {manifests} from '../../assets/conf.js'
export default {
props: ['id'],
data() {
return {
game: createjsList[this.id],
queue: new createjs.LoadQueue()
};
},
methods: {
onLibrariesLoaded() {
var lib = this.queue.getResult("EaselJS");
var libCont = document.getElementById("createjsLib");
libCont.innerHTML = "";
libCont.appendChild(lib);
document.getElementById('gameAssets').innerHTML = "";
var manifest = (this.game.manifest) ? this.game.manifest : '/static/games/' + this.id + '/manifest.json';
this.queue = new createjs.LoadQueue();
this.queue.on("complete", this.onGameAssetsLoaded);
this.queue.on("fileload", this.onGameAssetLoaded);
this.queue.loadManifest(manifest);
},
onGameAssetLoaded(e) {
var type = e.item.type;
if (type == createjs.LoadQueue.CSS || type == createjs.LoadQueue.JAVASCRIPT) {
document.getElementById('gameAssets').appendChild(e.result);
}
},
onGameAssetsLoaded() {
console.log('Assets Loaded');
}
},
created() {
var manifest = manifests.createjs;
this.queue.on("complete", this.onLibrariesLoaded);
this.queue.loadManifest(manifest);
console.log('created');
}
}
</script>
问题
我的问题是这个过程只工作一次。我只能加载EaselJS
库和实验文件一次,脚本会正确执行,但是一旦我导航(vue-router
,历史模式)回家,例如然后回到实验,它甚至无法再次加载库并在created
生命周期挂钩中崩溃。
创建钩子时出错:“TypeError:无法读取未定义的属性‘observeArray’”
我尝试使用destroyed
andbeforeDestroy
生命周期挂钩来取消、删除、重置PreloadJS
队列,但我尝试过的没有任何效果。该错误似乎发生在 Vue.js 的某个地方,但我不确定为什么或如何解决这个问题。我检查了清单 url,它指向正确的静态JSON
清单文件。
有什么想法吗?我在这里错过了什么?任何建议/帮助将不胜感激