2
我嘗試使用自定義元素。我想用JS來創建元素並將它們添加到DOM。 如果我在一個基本的HTML頁面中使用這一切都工作正常。當我嘗試代碼分割成單獨的文件導入自定義元素在javascript
'use strict';
class FlashCard extends HTMLElement {
constructor(cardSet) {
super();
this.cardSet = cardSet;
this.cardNumber = 0;
}
connectedCallback() {
this.id = 'flashcard';
this.style.cursor = 'pointer';
this.render(this.cardSet);
this.addEventListener('click', this.onClick);
}
render() {
this.innerHTML = this.cardSet[this.cardNumber];
}
onClick() {
let deckSize = this.cardSet.length;
if (this.cardNumber === deckSize-1) {
this.cardNumber = 0;
} else {
this.cardNumber++;
};
this.render();
}
}
customElements.define('flash-card', FlashCard);
document.addEventListener('DOMContentLoaded', function() {
let card = new FlashCard(['a', 'b', 'c', 'd']);
document.getElementsByTagName('body')[0].appendChild(card);
});
我的問題開始。
'use strict';
export default class FlashCard extends HTMLElement {
constructor(cardSet) {
super();
this.cardSet = cardSet;
this.cardNumber = 0;
}
connectedCallback() {
this.id = 'flashcard';
this.style.cursor = 'pointer';
this.render(this.cardSet);
this.addEventListener('click', this.onClick);
}
render() {
this.innerHTML = this.cardSet[this.cardNumber];
}
onClick() {
let deckSize = this.cardSet.length;
if (this.cardNumber === deckSize-1) {
this.cardNumber = 0;
} else {
this.cardNumber++;
};
this.render();
}
}
customElements.define('flash-card', FlashCard);
,並在單獨的文件
import FlashCard from './flashcard';
document.addEventListener('DOMContentLoaded', function() {
let card = new FlashCard(['a', 'b', 'c', 'd']);
document.getElementsByTagName('body')[0].appendChild(card);
});
然後我transpile中的package.json文件
"watch": "watchify elements/*.js -t babelify --plugins transform-es2015-classes
-o js/bundle.js --debug --verbose",
的錯誤我使用NPM腳本因爲出口/進口的javascript get in Chrome 55 is
Failed to construct 'HTMLElement': Please use the 'new'
operator, this DOM object constructor cannot be called as a function.
所以傳輸的代碼試圖調用HTMLElement對象上的構造函數方法,但該方法在這種情況下不是函數。
我的問題是我怎麼分割我的代碼到單獨的文件,因爲我試圖以上,但在某種程度上transpiler可以正確地解釋?
謝謝@Supersharp。 Reflect.construct代替super();沒有爲我工作。我得到一個錯誤,說我需要一個超級();.但插件工作出色。我非常感激,因爲我一直盯着它好幾個小時。 – leonormes