フォーム入力バインディングを理解する その8

何年か前に jQuery で作った type tester という簡易的なフォント(関連のスタイリング)のテスターツールを Vue.js で作ってみる。 その8
GitHub Pages: https://yuheijotaki.github.io/type-tester/
GitHub リポジトリ:https://github.com/yuheijotaki/type-tester
ツール、CSS のトグル表示
<template v-if=""> を ツールで使った場合、$emit してきた値がリセットされてしまうので CSS で表示/非表示にしました。
CSSの出力エリアはふつうに v-if を使いました。
App.vue(抜粋)
<template>
<div class="tools">
...
</div>
<div class="container">
<template v-if="displayCss">
<pre>CSS: {{styleObject}}</pre>
</template>
</div>
<ul class="toggle">
<li class="toggle__button">
<a class="toggle__anchor" href="javascript:void(0);" v-on:click="toggleTools">Tools toggle button</a>
</li>
<li class="toggle__button">
<a class="toggle__anchor" href="javascript:void(0);" v-on:click="toggleCss">CSS toggle button</a>
</li>
</ul>
</template>
...
data() {
return {
...
displayCss: false
...
}
},
methods: {
// CSSエリアのトグル表示
toggleCss: function () {
// `.css` クラスのトグル
this.displayCss = !this.displayCss;
},
// ツールのトグル表示
toggleTools: function () {
// `.tools` クラスのトグル
const tools = document.querySelector('.tools');
tools.classList.toggle('js-tools-active');
// `.container` クラスのトグル
const container = document.querySelector('.container');
container.classList.toggle('js-tools-active');
},
...
styleObject を出力用に整形
Vue で格納した styleObject を実際のCSS指定のテキスト形式に変換する。
computed 処理内に下記の感じで実装 font-familly だけ "" が必要なので分岐する
App.vue(抜粋)
...
computed: {
// styleObject を出力用に整形
styleObjectFormatted: function () {
const styleObject = this.styleObject; // styleObject を取得
const styleObjectArray = []; // テキスト用の配列を用意
// styleObject をループして新しい配列に key と value を格納
Object.keys(styleObject).forEach(function (key) {
if ( key === 'font-family' ) {
// key が 'font-family' の場合は値に '""' をつける
styleObjectArray.push(`${key}: "${styleObject[key]}";`);
} else {
styleObjectArray.push(`${key}: ${styleObject[key]};`);
}
});
const styleObjectText = styleObjectArray.join('\n'); // 1行ずつ改行処理
return styleObjectText;
}
}
...
これで <pre>{{styleObjectFormatted}}</pre> とすれば
font-family: "Helvetica , Hiragino Kaku Gothic ProN";
color: #000000;
background: #ffffff;
font-size: 16px;
line-height: 1.7;
letter-spacing: 0em;
font-weight: normal;
text-align: left;
padding-top: 20px;
padding-bottom: 20px;
padding-left: 20px;
padding-right: 20px;
font-feature-settings: normal;
-webkit-font-smoothing: subpixel-antialiased;
がreturnされる
次やること
- meta / OGP 設定
- localStorage 使ってリロード対策
- ラベルなど文字ゆれある所を直す
- ファイル/コンポーネント名を直す
- リファクタリング(アロー関数使える所使う)
- 全体スタイリング