ボタンを無効にするクリックイベントの後に呼び出すことができる基本的なJSプラグインをビルドしようとしています(ユーザーが複数のAPI呼び出しを呼び出さないようにする)ロード/起きる。ここでは、それがどのように見えるかです:Basic ES6 Javascript Plugin - 関数間で変数を再利用
これは、個別に素晴らしい作品が、私はそう、私はサイト全体でそれを再利用することができますプラグインとして書き直すことにしたいです。
ファイルloader.plugin.jsからのJSの縮小版です。
let originalBtnText;
export function showBtnLoader(btn, loadingText) {
const clickedBtn = btn;
const spinner = document.createElement('div');
spinner.classList.add('spin-loader');
originalBtnText = clickedBtn.textContent;
clickedBtn.textContent = loadingText;
clickedBtn.appendChild(spinner);
clickedBtn.setAttribute('disabled', true);
clickedBtn.classList.add('loading');
return this;
}
export function hideBtnLoader(btn) {
const clickedBtn = btn.target;
clickedBtn.textContent = originalBtnText;
clickedBtn.removeAttribute('disabled');
clickedBtn.classList.remove('loading');
return this;
}
export function btnLoader() {
showBtnLoader();
hideBtnLoader();
}
これはどのように使用したいかの例です。
import btnLoader from 'loaderPlugin';
const signupBtn = document.getElementById('signup-btn');
signupBtn.addEventListener('click', function(e) {
e.preventDefault();
btnLoader.showBtnLoader(signupBtn, 'Validating');
// Call API here
});
// Following API response
hideBtnLoader(signupBtn);
私が持っている問題は、私がshowBtnLoader
関数からoriginalBtnText
を格納し、hideBtnLoader
関数内でその変数を使用したいということです。もちろん、これを別の方法(データ属性として値を追加して後で取得するなど)で達成することはできますが、単純な方法があるかどうかは疑問です。
私が持っているもう一つの問題は、個々の機能を呼び出す正しい方法と、正しくインポートするかどうかがわからないことです。私は以下を試した。
btnLoader.showBtnLoader(signupBtn, 'Validating');
btnLoader(showBtnLoader(signupBtn, 'Validating'));
showBtnLoader(signupBtn, 'Validating');
しかし、私は次のエラーを取得する:
Uncaught ReferenceError: showBtnLoader is not defined
at HTMLButtonElement.<anonymous>
私はいくつかの良い記事や、このようなhttp://2ality.com/2014/09/es6-modules-final.htmlやES6 export default with multiple functions referring to each otherとしてSOの回答を読みましたが、私がやっての「正しい」方法に関しては少し混乱していますこれを再利用可能にする。
いずれのポインタも大歓迎です。
「./page」のターゲットページ{item、item}から中かっこでインポートします。ターゲットページのエクスポート{item、item} – Ozan
プラグイン?何に? – Bergi
'export default'でなければ、 'loaderPlugin'から' import {showBtnLoader} 'を使って明示的にインポートする必要があります; –