vue2.5入門(推薦,差代碼)

課程地址:https://www.imooc.com/learn/980html

 

教程:https://cn.vuejs.org/v2/guidevue

放在頭部,避免頁面出現抖屏node

掛載點react

下面是原生webpack

模板es6

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="./vue.js"></script>
</head>
<body>
    <div id="root">
        
    </div>
    <script>
        // 掛載點,模板,實例之間的關係
        new Vue({
            el: "#root",//掛載點
            template:   '<h1>{{msg}}</h1>',//模板
            data: {
                msg:    "hello world1"//實例
            }
        })    
        // 在vue內部實際操做
        // var dom = document.getElementById('root')
        // dom.innerHTML = "hello world"


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

插值表達式,寫法一web

v-text指令,寫法二vue-cli

v-html指令,寫法三npm

v-html與v-text區別:瀏覽器

被轉義

未被轉義

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="./vue.js"></script>
</head>
<body>
    <div id="root">
        <!-- 寫法一:插值表達式 -->
        <h1>{{number1}}</h1>
        <!-- 寫法二:v-text指令 -->
        <h1 v-text='number2'></h1>
        <!-- 寫法三:v-html指令 -->
        <h1 v-html='number3'></h1>
        <!-- v-html與v-text區別:v-html的標籤對未被轉義 -->
        <h1 v-text='number4'></h1>
        <h4 v-html='number4'></h1>
        
    </div>
    <script>
        // vue實例中的數據
        new Vue({
            el: "#root",
            data: {
                msg:    "hello world1",
                number1:    '111',
                number2:    '222',
                number3:    '333',
                number4:    '<h1>444</h1>'
            }
        })    



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

指令,v-on綁定事件,箭頭函數

 

簡寫

v-bind指令,綁定title,屬性綁定

等號後面內容是js表達式,不是字符串

簡寫

單項綁定

v-model指令,雙向數據綁定

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="./vue.js"></script>
</head>
<body>
    <div id="root">
        <!-- <div    v-on:click='()=>{alert(123)}'>{{content}}</div> -->
        <!-- v-on事件綁定 -->
        <div    v-on:click='handdleclick'>{{content}}</div>
        <!-- v-on事件綁定的簡寫 -->
        <div    @click='handdleclick'>{{content}}</div>

        <!-- v-bind屬性綁定 -->
        <div v-bind:title='title'>hello title1</div>
        <div v-bind:title='"del lee"   +   title'>hello title2</div>
        <!-- v-bind屬性綁定的簡寫    -->
        <div :title='title'>hello title3</div>
        
        <!-- v-model數據雙向綁定 -->
        <input v-model='double'>    
        <div>{{double}}</div>     
                    
    </div>
    <script>
        // vue中的綁定事件
        new Vue({
            el: "#root",
            data: {
                content:    "hello world1",
                title:  'this is hello world',
                double: 'this is data'
            },
            methods: {
                handdleclick:   function(){
                    // alert(123)
                    this.content = 'world'
                }
            }
        })    



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

computed,計算屬性,若是沒改變,會使用上一次計算的緩存結果

計算

和react的reselect庫很像

watch,偵聽器

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="./vue.js"></script>
</head>
<body>
    <div id="root"> 
               姓:<input v-model='firstName'>     
               名:<input v-model='lastName'>
               <div>{{firstName}}   {{lastName}}</div>
               <div>{{fullName}}</div>   
               <h2>{{count}}</h2>  
               
    </div>
    <script>
        // vue中的計算屬性和偵聽器
        new Vue({
            el: "#root",
            data: {
                firstName:  '',
                lastName:   '',
                count:  0
            },
            computed: {
                fullName:   function(){
                    return  this.firstName  +   '   '    + this.lastName
                }
            },
            watch: {
                firstName: function(){
                    this.count  ++
                },
                lastName:   function(){
                    this.count  ++
                }
            }
        })    



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

指令v-if,會從dom樹上清除

點擊隱藏顯示

指令v-show,不從dom樹上刪除

display=none

指令v-for,數據作循環

:key會提高每項渲染數據的效率,可是要求每一項數據不一樣

添加index下標,相同數據也能夠

但若是要頻繁對數據進行排序,index會出錯。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="./vue.js"></script>
</head>
<body>
    <div id="root"> 
        <!-- v-if指令,會從dom上清除 -->
        <div v-if='show1'>hello1</div>
        <button @click=handleClick1>toggle1</button>

        <!-- v-show指令,不會從dom上清除 -->
        <div v-show='show2'>hello2</div>
        <button @click=handleClick2>toggle2</button>

        <!-- v-for指令,數據循環 -->
        <ul>
            <li v-for='item of list1'>{{item}}</li>
        </ul>
        <!-- :key會提高每項渲染數據的效率,可是要求每一項數據不一樣 -->
        <ul>
            <li v-for='item of list2' :key="item">{{item}}</li>
        </ul>
        <!-- 添加index下標,相同數據也能夠 -->
        <ul>
            <li v-for='(item,index) of list3' :key="item">{{item}}</li>
        </ul>
    </div>
    <script>
        // vue中的計算屬性和偵聽器
        new Vue({
            el: "#root",
            data: {
                show1:   true,
                show2:   true,
                list1:   [1,1,1],
                list2:   [4,4,6],
                list3:   [7,6,6],     
            },
            methods: {
                handleClick1:    function(){
                    this.show1   =   !this.show1
                },
                handleClick2:    function(){
                    this.show2   =   !this.show2
                }
            }

        })    



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

點擊提交而且數據寫在下邊,input框消失

Vue.component定義的是全局組件

var一個,局部組建,在父組件外邊是調用不了的

組件聲明,實例模板裏就能夠使用

傳參

會報錯,彩曾傳遞不能直接使用

利用props來接收傳遞過來的參數

每個vue的組件又是vue的一個實例

根組件下沒有模板的時候,會用掛載點下的內容當模板

 

父組件到子組件經過屬性傳遞

子組件若是想被刪除,就要在父組件裏把子組件的那條數據給刪除

增長一個參數,index

接收index。經過$emit通知父組件,觸發delete事件

父組件監聽delete事件,監聽到的時候,觸發handleDelete事件

經過子組件向父組件傳值的方式,作好刪除

 

 

npm install --global vue-cli
vue init webpack todolist
cd todolist
npm run dev

bulid下放置webpack的配置文件

config是針對開發環境和線上環境的一些文件

node_modules是項目的依賴

src是源代碼所放置的目錄

static是靜態資源

瀏覽器編譯,es6檢測,不須要改動

整個網頁app

——————————————————

src/main.js整個項目的入口文件

建立了一個vue的實例,id=‘app’的掛載點

註冊了一個局部組建App(es6語法引入)

模板就是App組建的內容

Es6:若是鍵值都相同,只寫一個App

template模板,script標籤-組建邏輯,style樣式

vue-cli裏的語法:單文件組建

npm run dev
npm run start

之前data是對象,用{},如今是函數

es6簡化寫法

this指向本組件的實例

縮寫,別名

註冊局部組建

v-for循環

父組件向子組件傳值,利用屬性傳值

子組件接收傳值

增長功能實現

傳遞index

接收傳遞

解決console裏的警告問題,加一個:key

子組件觸發事件傳遞父組件,$emit

父組件監聽delete

觸發刪除事件

子組件樣式不會影響父組件

scoped樣式做用域

去掉scoped就會影響父組件

相關文章
相關標籤/搜索