Vue2.0入門學習筆記:內部指令詳解

初識vue2.0

#下載vue.js

vue.js(開發調試用)

vue.min.js(生產環境用)

#建立基本目錄

#用管理員身份打開cmd

#進入到項目目錄

D:\>cd D:\workspace\vue\vue-test1

#安裝live-server

D:\workspace\vue\vue-test1>cnpm install -g live-server

#執行live-server運行項目

live-server

#初始化項目,生成package.json (執行1次就好)

npm init

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Hello World</title>
    <script type="text/javascript" src="../assets/js/vue.js"></script>
</head>
<body>
    <h1>HelloWord</h1>
    <hr>
    <div id="app">
        {{message}}
    </div>
    <script type="text/javascript">
        var app = new Vue({
            el: '#app',
            data: {
                message: 'hello word!+xwk'
            }
        })
    </script>
</body>
</html>

v-if  v-else v-show

  • v-if:判斷是否加載,可以減輕服務器的壓力,在需要時加載
  • v-show:不管true還是false都加載,只不過是調整css display屬性讓其是否顯示,可以使客戶端操作更加流暢
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>v-if  v-else v-show指令</title>
    <script type="text/javascript" src="../assets/js/vue.js"></script>
</head>
<body>
    <h1>v-if  v-else v-show指令</h1>
    <hr>
    <div id="app">
        <!-- v-if:判斷是否加載,可以減輕服務器的壓力,在需要時加載 -->
        <div v-if="isLogin">歡迎,xwk</div>
        <div v-else>請登錄</div>
        <!-- v-show:不管true還是false都加載,只不過是調整css display屬性讓其是否顯示,可以使客戶端操作更加流暢 -->
        <!--<div v-show="isLogin">歡迎,xwk</div>-->
    </div>
    <script type="text/javascript">
        var app = new Vue({
            el: '#app',
            data: {
                isLogin:true
            }
        })
    </script>
</body>
</html>

v-for

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>v-for</title>
    <script type="text/javascript" src="../assets/js/vue.js"></script>
</head>
<body>
    <h1>v-for</h1>
    <hr>
    <div id="app">
        <ul>
            <li v-for="item in sortItems">
                {{item}}
            </li>
        </ul>
        <hr>
        <ul>
            <li v-for="(student,index) in sortStudents">
                {{index+1}}:{{student.name}}-{{student.age}}
            </li>
        </ul>
    </div>
    <script type="text/javascript">
        var app = new Vue({
            el: '#app',
            // 1.先執行data
            data: {
                items:[3,6,2,7,9,1],
                students:[
                    {name:'xwk',age:28},
                    {name:'wkx',age:45},
                    {name:'kwx',age:18}
                ]
            },
            // 2.再執行computed
            computed:{
                sortItems:function () {
                    return this.items.sort(sortNum);
                },
                sortStudents:function () {
                    return sortByKey(this.students,'age');
                }
            }
        })
        // 數組排序
        function sortNum(a,b){
            return a-b
        }
        // 數組對象方法排序
        function sortByKey(array,key) {
            return array.sort(function (a,b) {
                var x=a[key];
                var y=b[key];
                return((x<y)?-1:((x>y)?1:0));
            });
        }
    </script>
</body>
</html>

v-text v-html

v-html會引起xss攻擊 一般不推薦使用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>v-text v-html</title>
    <script type="text/javascript" src="../assets/js/vue.js"></script>
</head>
<body>
    <h1>v-text v-html</h1>
    <hr>
    <div id="app">
        <span>{{message}}</span> = <span v-text="message"></span>
        <br/>
        <!-- v-html會引起xss -->
        <span v-html="dodo"></span>
    </div>
    <script type="text/javascript">
        var app = new Vue({
            el: '#app',
            data: {
                message: 'hello word!+xwk',
                dodo:'<h2>hello word!+xwk</h2>'
            }
        })
    </script>
</body>
</html>

v-on

綁定事件監聽器

<!DOCTYPE html>
<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>v-on</title>
    <script type="text/javascript" src="../assets/js/vue.js"></script>
</head>
<body>
<h1>v-on</h1>
<hr>
<div id="app">
    本場比賽得分:{{fenshu}}
    <p>
        <button v-on:click="jiafen" >加分</button>
        <button @click="jianfen" >減分</button>
        <hr>
        <!-- 回車響應 -->
        <input type="text" v-on:keyup.enter="onEnter" v-model="fenshu2">
    </p>
</div>
<script type="text/javascript">
    var app = new Vue({
        el: '#app',
        data: {
            fenshu: 0,
            fenshu2:1
        },
        methods:{
            jiafen:function () {
                this.fenshu++;
            },
            jianfen:function () {
                this.fenshu--;
            },
            onEnter:function () {
                this.fenshu=this.fenshu+parseInt(this.fenshu2);
            }
        }
    })
</script>
</body>
</html>

v-model

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>v-model數據源綁定</title>
    <script type="text/javascript" src="../assets/js/vue.js"></script>
</head>
<body>
<h1>v-model數據源綁定</h1>
<hr>
<div id="app">
    <p>原始文本信息:{{message}}</p>
    <!-- 文本框 -->
    <hr>
    <h3>文本框</h3>
    <p>
        v-model:<input type="text" v-model="message">
        <!-- v-model.lazy懶加載:焦點離開時改變 -->
        v-model.lazy:<input type="text" v-model.lazy="message">
        <!-- v-model.number:只有數字才能雙向綁定 -->
        v-model.number:<input type="text" v-model.number="message">
        <!-- v-model.trim:去空格 -->
        v-model.trim:<input type="text" v-model.trim="message">
    </p>
    <!-- 文本域 -->
    <hr>
    <h3>文本域</h3>
    <textarea cols="30" rows="10" v-model="message"></textarea>
    <hr>
    <h3>多選框綁定一個值</h3>
    <input type="checkbox" id="isTrue" v-model="isTrue">
    <label for="isTrue">{{isTrue}}</label>
    <!-- 多選框綁定數組 -->
    <hr>
    <h3>多選框綁定數組</h3>
    <p>
        <input type="checkbox" id="xwk" value="xwk" v-model="web_names"><label for="xwk">xwk</label>
        <input type="checkbox" id="wkx" value="wkx" v-model="web_names"><label for="wkx">wkx</label>
        <input type="checkbox" id="kwx" value="kwx" v-model="web_names"><label for="kwx">kwx</label>
    </p>
    <p>{{web_names}}</p>
    <!-- 單選框綁定 -->
    <hr>
    <h3>單選框綁定</h3>
    <p>
        <input type="radio" id="one" value="男" v-model="sex"><label for="one">男</label>
        <input type="radio" id="two" value="女" v-model="sex"><label for="two">女</label>
        <p>{{sex}}</p>
    </p>
</div>
<script type="text/javascript">
    var app = new Vue({
        el: '#app',
        data: {
            message: 'hello word!+xwk',
            isTrue:true,
            web_names:[],
            sex:'男'
        }
    })
</script>
</body>
</html>

v-bind

<!DOCTYPE html>
<html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>v-bind綁定標籤屬性</title>
    <script type="text/javascript" src="../assets/js/vue.js"></script>
</head>
<body>
<h1>v-bind綁定標籤屬性</h1>
<hr>
<div id="app">
    <p><img v-bind:src="imgSrc" width="200px"></p>
    <p><a :href="webUrl" target="_blank">百度</a></p>
    <hr>
    <div :class="className">1.綁定class</div>
    <div :class="{classA:isOK}">2.綁定class中的判斷</div>
    <hr>
    <div>
        <input type="checkbox" id="isOK" v-model="isOK"><label for="isOK">isOK={{isOK}}</label>
    </div>
    <hr>
    <div :class="[classA,classB]">3.綁定class中的數組</div>
    <hr>
    <div :class="isOK?classA:classB">4.綁定class中的三元運算符</div>
    <hr>
    <div :style="{color:redVal,fontSize:fontVal}">5.綁定style</div>
    <div :style="styleObj">5.綁定style</div>
</div>

<style>
    .classA{
        color: red;
    }
    .classB{
        font-size: 150%;
    }
</style>

<script type="text/javascript">
    var app = new Vue({
        el: '#app',
        data: {
            imgSrc:'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1586183309110&di=be1bb9ab674d98a6d65a79611251ff97&imgtype=0&src=http%3A%2F%2Fa0.att.hudong.com%2F78%2F52%2F01200000123847134434529793168.jpg',
            webUrl:"http://www.baidu.com",
            className:"classA",
            isOK:true,
            classA:'classA',
            classB:'classB',
            redVal:'red',
            fontVal:"20px",
            styleObj:{
                color:'green',
                fontSize:'24px'
            }
        }
    })
</script>
</body>
</html>

v-pre v-cloak v-once

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>v-pre v-cloak v-once</title>
    <script type="text/javascript" src="../assets/js/vue.js"></script>
</head>
<body>
<h1>v-pre v-cloak v-once</h1>
<hr>
<div id="app">
    <!-- 原樣輸出{{message}} -->
    <div v-pre>{{message}}</div>
    <div v-cloak>渲染完成後,才顯示!</div>
    <!-- 只進行一次渲染 -->
    <div v-once>{{message}}</div>
    <div><input type="text" v-model="message"></div>
    <div>{{message}}</div>
</div>
<script type="text/javascript">
    var app = new Vue({
        el: '#app',
        data: {
            message: 'hello word!+xwk'
        }
    })
</script>
</body>
</html>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章