1. 程式人生 > >Vue.js--基本命令&元件化應用構建

Vue.js--基本命令&元件化應用構建

Vue.js

前言:Vue.js的官方學習網站是:https://cn.vuejs.org/v2/guide/#元件化應用構建

這裡面講述了Vuejs的指令,例如v-bind,v-if,v-on,v-model等等。

----------------------------------------------------------------------------------------------------------------------------------

1.基本指令

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue</title>
    <script src="vue.js"></script>
</head>
<body>
 <div id="app">
     <!--this is a view-->
     {{ message }}
 </div>
<div id="app-2">
    <!--this is a instruction-->
    <span v-bind:title="message">
        here is surprise
    </span>
</div>
<div id="app-3">
    <span v-if="seen">
        <!--this is a structure that blind data to DOM-->
        you can see me
    </span>
</div>
<div id="app-4">
    <ol>
        <!--this is an array used in table-->
        <li v-for="fruit in fruitshop">
            {{fruit.text}}
        </li>
    </ol>
</div>
<div id="app-5">
    <p>{{message}}</p>
    <!--this is an function blinding to an button-->
<button v-on:click="reversemessage">reversemessage</button>
</div>
<div id="app-6">
    <p>
        {{update}}
    </p>
    <!--showing data changes by the changing data in updata-->
    <input v-model="update">
</div>
<div id="app-7">
<ol>
    <todo-item v-for="item in itemlist"
    v-bind:todo="item"
    v-bind:key="item.id"></todo-item>
</ol>
</div>
</body>
<script>
    Vue.component('todo-item', {
        //design a property by yourself  using props
        //this name of property is todo
        props:['todo'],
        template: '<li>{{todo.text}}</li>'
    })
    var app7=new Vue({
        el:"#app-7",
        data:{
            itemlist:[{id:0,text:'homework'},
                   {id:1,text:'housework'},
                   {id:2,text:'drink'}]
        }
    })
    var app6=new Vue({
        el:"#app-6",
        data:{
            update:'today is '+new Date().toDateString()
        }
    })
    var app5=new Vue({
        el:"#app-5",
        data:{
            message:'you are a boy'
        },
        methods: {
            reversemessage: function () {
                //"j'oin"  put the element to an array
                this.message = this.message.split(' ').reverse().join(' ')
            }
        }
    })
    var app4=new Vue({
        el:"#app-4",
        data:{
            fruitshop:[
                {text:'apple'},
                {text:'pineapple'},
                {text:'banana'}
            ]
        }
    })
    var app3=new Vue({
        el:"#app-3",
        data:{
            seen:true
        }
    })
    var app2=new Vue({
        el:"#app-2",
        data:{
            message:'localtime: ' + new Date().toLocaleString()
        }
    })
    var app =new Vue ({
        //this is a viewmodel
        el:"#app",
        data: {
            //this is a model
            message: 'Hello world !'
        }
    })
</script>
</html>

按照上面一個一個來,再對應官方文件的對應解釋,很容易就上手了。

2.元件化應用構建

學會了基本指令和元件化應用,就能做出一個小demo了。

我的vue-member-record小demo原始碼地址為:https://github.com/drunkprogrammer/vue-member-record

效果圖如下所示


進入正題,這裡只說我踩過的坑:

1.學習了基本指令和組建化應用構建的基礎知識後,就開始寫DEMO程式碼。覺得還是太急躁的,最好再返過頭看一遍。

  v-model不僅可以將dom的資料繫結到應用上,而且可以在表單控制元件元素上建立雙向資料繫結。它會根據控制元件型別自動選取正確的方法來

 更新元素。

 v-for指令在元件化應用建立時,需要和v-bind連用,v-bind:key是序號。

2.在table標籤自定義tr-item元件,發現模板元素是塊級元素,原本tr應該是內聯元素,這就會導致每一次新增的成員的位置跑到表頭的上方。對此原因,官方給出解釋:


就是瀏覽器看到tr-item元件時,認為是無效的,Vue只有在瀏覽器解析和標準化HTML後才能獲得模板內容。

3.元件化構建Vue.component中的預定義選項template裡的內容必須是由一對標籤開始和結束,你可以在這對標籤中插入其他標籤,但是如果是一個標籤接著一個標籤,它就會認為是多個模板。例如:'<td></td><td></td>'它就會只認為'<td></td>

'是這個模板。

'<tr><td></td><td></td></tr>'它就會認為'<tr><td></td><td></td></tr>'是這個模板了。