1. 程式人生 > >vue.js簡單小案例

vue.js簡單小案例

一、Vue.js實現點選自增

點選事件:v-on
縮寫:@
預期:Function | Inline Statement | Object
引數:event
修飾符:
.stop - 呼叫 event.stopPropagation()。
.prevent - 呼叫 event.preventDefault()。
.capture - 新增事件偵聽器時使用 capture 模式。
.self - 只當事件是從偵聽器繫結的元素本身觸發時才觸發回撥。
.{keyCode | keyAlias} - 只當事件是從特定鍵觸發時才觸發回撥。
.native - 監聽元件根元素的原生事件。
.once - 只觸發一次回撥。
.left - (2.2.0) 只當點選滑鼠左鍵時觸發。
.right - (2.2.0) 只當點選滑鼠右鍵時觸發。
.middle - (2.2.0) 只當點選滑鼠中鍵時觸發。
.passive - (2.3.0) 以 { passive: true } 模式新增偵聽器

用法:
繫結事件監聽器。事件型別由引數指定。表示式可以是一個方法的名字或一個內聯語句,如果沒有修飾符也可以省略。
用在普通元素上時,只能監聽原生 DOM 事件。用在自定義元素元件上時,也可以監聽子元件觸發的自定義事件。
在監聽原生DOM事件時,方法以事件為唯一的引數。如果使用內聯語句,語句可以訪問一個event屬性:v-on:click=”handle(‘ok’, $event)”。從 2.4.0 開始,v-on 同樣支援不帶引數繫結一個事件/監聽器鍵值對的物件。注意當使用物件語法時,是不支援任何修飾器的。

<!DOCTYPE html>
<html lang="en"
>
<head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <div id = "app"> <input type="text" v-model="number"> <button v-on:click="handerIncrease()">點選+1</button> </div> <script src = "https:
//cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js">
</script> <script> new Vue({ el :"#app", data:{ number:'1' }, methods:{ handerIncrease:function(){ this.number++ } } }) </script> </body> </html>

效果圖:
這裡寫圖片描述

二、購物車商品的簡單計算

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <div>
        商品價格:<input type="number" v-model = "price"><br>
        商品數量:<button v-on:click = "count--">-</button>{{ count }}<button v-on:click = "count++">+</button><br>
        總價格:<span>{{ price * count }}</span>
        </div>
    </div>
    <script src = "https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
    <script>
        new Vue({
            el:'#app',
            data:{
                price:'5',
                count:'1'

            }
        })

    </script>
</body>
</html>

效果圖:
這裡寫圖片描述

三、實現簡單的加減乘除運算

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <input type="number" v-model = "input1">
        <select  v-model="selected">
            <option value="0">+</option>
            <option value="1">-</option>
            <option value="2">*</option>
            <option value="3">/</option>
        </select>
        <input type="number" v-model = "input2">
        <button v-on:click="onclick">=</button>
        <span>{{ sum }}</span>
    </div>
    <script src = "https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
    <script>
        const app = new Vue({
            el:'#app',
            data:{
                selected:'',
                input1:'',
                input2:'',
                sum:''
            },
            methods:{
                onclick(){
                    if(this.selected=='0'){  
                    this.sum=(this.input1-0)+ (this.input2-0)  
                }  
                    if(this.selected=='1'){  
                    this.sum=eval(this.input1- this.input2)
                }  
                    if(this.selected=='2'){  
                    this.sum=eval(this.input1* this.input2)  
                }  
                    if(this.selected=='3'){  
                    this.sum=eval(this.input1/this.input2)  
                } 

                }
            }
        })
    </script>

</body>
</html>

效果圖:
這裡寫圖片描述

四、簡記所要做的事情(TODO)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        .done{
            text-decoration: line-through;
            color:#ccc;
        }
    </style>
</head>
<body>
    <div id="app">
        <h1>ToDo</h1>
        <p>{{todos.filter(item=>!item.done).length}}of {{todos.length}} remaining [archive]</p>
        <p v-for="(item,index) in todos">
            <!--
                checkbox:雙向綁定了item.done,
                當CheckBox改變的時候,會影響資料 item.done 也跟著改變
                當 item.done 改變的時候,會影響所有使用了這個 item.done 的繫結
            -->
            <input type="checkbox" v-model="item.done">
            <!--
                v-bind:可用來動態的繫結屬性值,class給了一個物件:
                物件的key就是類名,物件的value是布林值
                當布林值為true的時候,作用這個key樣式
                當布林值為false的時候,去除這個key樣式
            -->
            <span v-bind:class = "{done:item.done}">{{item.title}}</span>
            <button @click = "handleremovetodoclick(index)">刪除</button>
        </p>
        <input type="text" v-model="todoText" @keydown.enter="handerIncrease">
        <button v-on:click="handerIncrease">Add</button>

    </div>
    <script src="node_modules/vue/dist/vue.js"></script>
    <script>
        const todos = [
                {id:1,
                title:'吃飯',
                done:true},

                {id:2,
                title:'睡覺',
                done:false},

                {id:3,
                title:'寫程式碼',
                done:true},
        ]
        const app = new Vue({
            el:'#app',
            data:{
                todos,
                todoText:''

            },
            methods:{
                handerIncrease(){
                    //console.log('hander click')
                    //得到文字框的內容,將內容push到todos
                    const todoText = this.todoText.trim()
                    if(!todoText.length){//非空判斷
                        return
                    }
                    this.todos.push({
                        id:this.todos[this.todos.length-1].id+1,
                        title:todoText,
                        done:false
                    })
                    //新增完後清空
                    this.todoText = ''

                },
                handleremovetodoclick(index){
                    this.todos.splice(index,1)
                },

            }
        })
    </script>
</body>
</html>

效果圖:
這裡寫圖片描述