採点されません。匿名です。 間違えることは学習の一部です。読むだけでもかまいません。

Vue — v-bind 詳細

テクノロジ系 / L01 template-syntax — テンプレート構文

Vue — v-bind 詳細

基本 (再掲)

<img :src="imageUrl" :alt="imageAlt" />
<a :href="url">Link</a>
<input :value="text" :disabled="isDisabled" />

:属性名="JS式" で動的に。

複数属性をまとめて

<script setup>
const attrs = {
  id: "user-1",
  class: "card",
  "data-role": "admin",
};
</script>

<template>
  <div v-bind="attrs">...</div>
</template>

v-bind="object"オブジェクトの各キーを属性として展開。

ラッパーコンポーネントで透過するときに便利。

Boolean 属性

<template>
  <button :disabled="isLoading">Save</button>
  <!-- isLoading が true → disabled が付く
       false → disabled 属性なし -->

  <input :readonly="isReadonly" />
</template>

disabled / readonly / required / checked / selected などは

boolean で扱われる (HTML仕様)。

.prop modifier

<!-- 属性ではなく DOM プロパティに設定 -->
<input :value.prop="value" />

<!-- 普通の :value (属性) は初期値、value プロパティ (DOM) は現在値 -->

input の初期値と現在値の違いを意識するときに。

普段は意識しなくてよい。

カスタムコンポーネントへの渡し

<UserCard :user="currentUser" :show-actions="true" />

子コンポーネント側で defineProps (L02 ch01) で受け取る。

kebab-case → camelCase に変換される (show-actionsshowActions)。

短縮記法 まとめ

完全形短縮
v-bind:src="...":src="..."
v-on:click="..."@click="..."
v-slot:default#default

:@絶対覚える。実コードでは短縮形が圧倒的多数。

まとめ

  • 属性: :src="..." 短縮形を使う
  • Boolean 属性は true で付く / false で消える
  • v-bind="object" で複数属性まとめ展開
  • 短縮: : (bind) / @ (on) / # (slot)

次は v-on でイベント

考えてみよう

既定では正解・不正解の判定はしません。自分のペースで「答えを見る」を。採点してほしい場合だけ「採点してほしい」を押してください。

Lv1: 基本 — 属性バインディング

問題

<script setup>
const imageUrl = ref("https://placehold.jp/300x200.png");
const isDisabled = ref(false);
const userId = ref(1);
</script>

<template>
  <img :src="imageUrl" :alt="`User ${userId}`" />
  <a :href="`/users/${userId}`">User {{ userId }}</a>
  <button :disabled="isDisabled">Click</button>
  <button @click="isDisabled = !isDisabled">Toggle disabled</button>
</template>

合格基準

  • 4要素とも動的バインディング
  • toggle ボタンで disabled が切り替わる

Lv2: 応用 — v-bind="object" で複数属性

問題

<script setup>
const props = {
  type: "email",
  required: true,
  placeholder: "email@example.com",
  maxlength: 100,
};
</script>

<template>
  <input v-bind="props" />
</template>

DevTools で input の属性が全部反映されていることを確認。

合格基準

  • 4属性が全部 input に
  • shorthand v-bind="object" を理解

Lv3: 発展 — Boolean 属性の挙動

問題

<script setup>
const isReadonly = ref(true);
const isHidden = ref(false);
</script>

<template>
  <input :readonly="isReadonly" />
  <div :hidden="isHidden">hidden test</div>
  <button @click="isReadonly = !isReadonly">Toggle readonly</button>
</template>

DevTools で:

  • isReadonly = true<input readonly>
  • isReadonly = false<input> (readonly 属性自体が消える)

を観察。

合格基準

  • boolean 属性の真偽で 属性自体が出現/消失 することを確認

提出

submission.md に3問の回答を。