---
# System prepended metadata

title: 指令觀念介紹 (2-1)
tags: [Vue, 2. 指令語法全介紹]

---

# 指令觀念介紹 (2-1)
###### tags: `Vue` 、 `2. 指令語法全介紹`
2022.3.1
![](https://i.imgur.com/mwdqt4X.png)



### 在{{}}使用程式語言 : 在大括號中可以直接使用Javascripe語言，例如:(ex:反轉文字、if判斷)
```
//-----------反轉文字-----------
{{ text }} //結果:大中天
{{ text.split('').reverse().join('') }} //結果:天中大，原理:先將字串分割成單一文字陣列，然後反轉陣列順序，最後從新結合文字。
//-----------------------------

//-----------if判斷-------------
 {{judge?是:否}}
//-----------------------------

<script>
data(){
    return {
        text:'大中天',
        judge : true,
    }
}
</script>
```

### v-pre : 不要選染Vue程式，例如在網頁上呈現{{}}
```
<div v-pre> {{}} </div>
```

### v-test、{{}} : 文字渲染
```
<span v-text="text"></span> //結果:這是一串文字
{{text}} //結果:這是一串文字

<script>
data(){
    return {
        text:'這是一串文字';
    }
}
</script>
```

### v-html :當在script中寫html，使用{{}}渲染無法呈現HTML語法，因此要使用此語法(盡量少用動態語法渲染HTML語法，因為容易被XSS攻擊)。
```
{{ html }}  //結果:<p>這是有使用HTML語法</p>
<div v-html="html"></div> //結果:這是有使用HTML語法

<script>
     data(){
            return{
                    html:'<p>這是有使用HTML語法</p>'
                  }
            }
</script>
```

### v-once : 當資料有套用雙向連結(v-model)時，資料被更改時文字呈現也會同步更改，因此使用v-once能讓渲染只有一次。
```
<input type="text" v-model="text">
<div>{{text}}</div>
<div v-once>{{text}}</div>

<script>
data(){
        return{
                text:'123'
              }
},
</script>
```

### v-if : 判斷

```
<!------------------ 單Boolean判斷 ---------------------->
<p v-if = "isFull">小明 飽了</p>
<p v-else>小明 還沒吃飽</p>
<!------------------------------------------------------>

<!------------------- 多條件判斷 ------------------------>
<div v-if ="link ==='小明'">小明吃早餐</div>
    <div v-else-if = "link ==='小美'">小美去百貨公司</div>
    <div v-else-if = "link === '杰倫'">杰倫去幫助人</div>
<!------------------------------------------------------>

<!-------------- v-for 與 v-if 混用 --------------------->
<template v-for="(item, key) in products"  v-bind:key="item.name">
    <li v-if = "item.price === 30">
        {{ item.name}} / {{ item.price }} 元
    </li>
</template>
<!------------------------------------------------------>

<!------------- v-if 與 v-show 差異 -------------------->
<p v-show="isFull">小明 飽了</p>  //如果isFull等於false，只會用display: none; 隱藏，可以在F12上看到程式碼
  <p v-if="isFull">小明 飽了</p> //如果isFull等於false，F12整個看不到
  <button type="button" v-on:click="change('isFull')">狀態切換</button>
<!------------------------------------------------------>

```

### v-for : 迴圈，迴圈可以呼喚(陣列、物件)，正確寫法一定要綁定key值。
* 陣列迴圈
* 物件迴圈
* 純數值迴圈
* <template>標籤使用在 v-for

```
<div id="app">
<!------------------ 陣列迴圈 ---------------------->
<ul>
    <li v-for="(item,key) in products" :key = "item.name">
        {{ item.key }} - {{ item.name }} {{ item.price }}元
    </li>
</ul>
<!------------------------------------------------>

<!------------------ 物件迴圈 ---------------------->
<ul>
    <li v-for="(item,key) in productsObj" :key = "item.name">
        {{ item.key }} - {{ item.name }} {{ item.price }}元
    </li>
</ul>
<!------------------------------------------------>
    
<!----------------- 純數值迴圈 --------------------->
<ul>
    <li v-for="i in 5">{{ i }}</li>
</ul>    
<!------------------------------------------------>    
    
<!------------ <template>標籤使用在 v-for ---------->
  <table class="table">
    <tbody>
      <template v-for="(item,key) in products" :key="item.name">
        <tr >
          <th rowspan="2">{{ key+1 }}</th>
          <td colspan="2">
            {{ item.name }}
          </td>
        </tr>
        <tr>
          <td>
            {{ item.price }}元
          </td>
          <td>
            {{ item.vegan? '可':'不可' }}素食
          </td>
        </tr>
      </template>  
    </tbody>
  </table>    
<!------------------------------------------------>
<div>
     
<script>
data() {
    return {
      products: [
        {
          name: '蛋餅',
          price: 30,
          vegan: false
        },
        {
          name: '飯糰',
          price: 35,
          vegan: false
        },
  
      ],
      productsObj: {
        chineseOmelette: {
          name: '蛋餅',
          price: 30,
          vegan: false
        },
        riceBall: {
          name: '飯糰',
          price: 35,
          vegan: false
        },
      },
    }
</script>
```
    
### v-bine(縮寫＂：＂) : 屬性綁定，當HTML要使用vue語法時，在原語法前加"："即可附於傳喚Vue能力。

```
<!------------- 簡單試例1:圖片召喚src、滑鼠移到圖片出現文字titil ---------->
<img :src="breakfastShop.imgUrl" :title="breakfastShop.name" class="square-img" alt="">
<!-------------------------------------------------------------------->
    
<!---------------------- 簡單試例2:按鈕disabled ----------------------->
<button type="submit" :disabled="isFull">送出</button>
<!-------------------------------------------------------------------->
    
<!----------------- 簡單試例3:串接，拉滑桿挑整圖片大小 ------------------->
<input type="range" min="100" max="1000" v-model="imageSize"><br>
<img :src=`${breakfastShop.resizeImg}&w=${imageSize}` alt="">    
<!-------------------------------------------------------------------->

<!-- 簡單試例4:動態屬性綁定，文字切換模式(disabled=無效，readonly=只能讀) -->
<button type="button"
v-on:click="dynamic = dynamic === 'disabled' ? 'readonly':'disabled'">切換為 {{ dynamic }}</button>
<!-- //如果dnamic=readonly就改為disabled，反之亦然。 -->
<br>
<input type="text" :value="name" :[dynamic]>
<!-------------------------------------------------------------------->
```
