原生js项目转vue, 使用onclick, 事件不能正常监听, 无法触发事件处理函数.
原生代码内存在<template></template>
标签, 此处直接放到vue内使用(不知道是否会存在问题).
请不要提供使用@ click
的方案, 该项目内并不适用.
逻辑简化之后如下, 代码可跑:
<template>
<div id="home">
<div id="main-editor"></div>
<template id="editor-template">
<div id="main-ui" class="editor-ui">
<div id="header">
<div id="global-info">
<div id="selectors">
<select id="scene-selector">
<option>--scene0--</option>
<option>--scene1--</option>
<option>--scene2--</option>
</select>
</div>
</div>
</div>
</div>
</template>
</div>
</template>
import { Editor } from "../../public/js/editor.js";
export default {
name: "Home",
created() {
this.$nextTick(() => {
this.start();
});
},
methods: {
async start() {
let mainEditor = await this.createMainEditor();
},
async createMainEditor() {
let template = document.querySelector('#editor-template');
let maindiv = document.querySelector("#main-editor");
let main_ui = template.content.cloneNode(true);
// 上面这段是原生写法, 在vue中会报错template中无content属性
// 我把这三句改成如下三句了
// let maindiv = document.querySelector("#main-editor");
// let template = document.querySelector("#main-ui");
// let main_ui = template.cloneNode(true);
maindiv.appendChild(main_ui);
let editor = new Editor(maindiv.lastElementChild);
window["editor"] = editor;
return editor;
},
},
};
// editor.js
import { Header } from './header.js';
function Editor(editorUi) {
this.init = function () {
this.header = new Header(editorUi.querySelector("#header"), (e) => {
this.scene_changed(e.currentTarget.value);
});
}
this.init();
}
export { Editor };
// header.js
var Header = function (ui, onSceneChange) {
this.sceneSelectorUi = ui.querySelector("#scene-selector");
this.sceneSelectorUi.onchange= ((e) => {
onSceneChange();
})
};
export { Header };
希望能够得知事件无法触发的原因, 如果您还愿意提供解决方案, 不胜感激.