moduleのやつ。
どういうあれか
普通はページ内で使うjsをまとめたファイルを読み込ませて済む。
だけど、状況に応じて読み込みたい内容が変わる場合もある。
それ込みでそれぞれに全部書いちゃってもいいんだけど、内容が膨大だと修正とかする場合に触りにくくなっちゃう。
moduleを使う
こんな感じで配置されてるとして
index.html
js
├ scripts.js
└ import.js
index.htmlでscripts.jsを読み込んで、scripts.jsでimport.jsを読み込むとする。
まず、こうなる。
<script type="module" src="js/scripts.js"></script>
type=”module”じゃないとダメ。
先に読み込む方、こんな感じ。
export const testArray = [{
****: '****',
****: ['****','****','****','****','****'],
****: '****',
****: '****',
},{
****: '****',
****: ['****','****','****','****','****'],
****: '****',
****: '****',
},{
****: '****',
****: ['****','****','****','****','****'],
****: '****',
****: '****',
}];
export const test = 'hello world';
宣言の最初に「export」をつける。
で、普通に読み込むならこう。
import importTest from "./import";
console.log(importTest.test);
console.log(importTest.testArray[0]['***']);
importで変数名を決めつつjsを読み込む。
出力するときはその変数名から始めて、配列っぽい呼び出し方になる。
条件分岐で読み込み先を指定したい場合
条件で変えたい場合。
index.html
js
├ scripts.js
└ import
├ import01.js
├ import02.js
︙
HTMLでこんな感じだったとして
<label><input type="radio" name="select" value="import01">import01</label>
<label><input type="radio" name="select" value="import02">import02</label>
<label><input type="radio" name="select" value="import03">import03</label>
<label><input type="radio" name="select" value="import04">import04</label>
︙
こう。
$(function(){
$(document).on('change','input[name="select"]',function(){
const selectVal = $('input[name="select"]:checked').val();
import('./import/' + selectVal + '.js')
.then(a => {
console.log(a.testArray[1]['***']);
});
})
})
radioの値とインポートするファイル名をリンクさせて、選択時に指定ファイルの読み込みを発火させる。
はじめに書いたimportは最上位に書かないといけないけど、import()だったら条件分岐とかの中で書けるようになる。使い分けですね。
オフライン環境だと動かない
moduleを使うにあたり、ローカル環境だと動かないことに注意。
サーバーにアップしないと動かない。
いちいちサーバーにアップするのはめんどいので、ローカル環境でどうにかしたいならXAMPPとかでサーバーを作るとかで対処する。
コメント