vue初級使用


一、Vue是什么?

  Vue(讀音 /vjuː/, 類似於 view)是一個構建數據驅動的 web 界面的漸進式框架。采用自底向上增量開發的設計。Vue.js 的目標是通過盡可能簡單的 API 實現響應的數據綁定和組合的視圖組件。

 

  Vue漸進式的理解:http://www.bslxx.com/a/vue/2017/1205/1490.html

 

  Vue只關注視圖層。

  Vue通過新的屬性(自定義)和{{表達式}}擴展了 HTML。

  Vue的目標是通過盡可能簡單的 API 實現響應的數據綁定和組合的視圖組件。

  Vue學習起來非常簡單。

  官網:https://cn.vuejs.org/

 

二、Vue特性

輕量

  Vue.js庫的體積非常小的,並且不依賴其他基礎庫。

數據綁定

  對於一些富交互、狀態機類似的前端UI界面,數據綁定非常簡單、方便。

指令

  內置指令統一為(v-*),也可以自定義指令,通過對應表達值的變化就可以修改對應的DOM。

插件化

  Vue.js核心不包含Router、AJAX、表單驗證等功能,但是可以非常方便地根據需要加載對應插件。

組件化

  組件可以擴展 HTML 元素,封裝可重用的代碼。允許我們使用小型、自包含和通常可復用的組件構建大型應用

兼容性

  Vue 不支持 IE8 及以下版本,因為 Vue 使用了 IE8 無法模擬的 ECMAScript 5 特性。但它支持所有兼容 ECMAScript 5 的瀏覽器

 

三、Vued的使用:

       它有兩個版本:開發版本和生產版本(由於代碼太多,具體的vue.js文件需要到vue官網復制)。

 

<!-- 引入vue開發版文件 -->

 <script type="text/javascript" src="js/vue/vue.js"></script>

 

四、Vue實例講解

  1vue實例掛在(el)的標簽

  每個Vue實例通過el配置掛載的標簽,該標簽可以通過id或者是class掛載。  實例上的屬性和方法只能夠在當前實例掛載的標簽中使用

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <div id="app">
            <h3> {{messge}}</h3>
            姓名:{{user.name}};年齡:{{user.age}};性別:{{user.sex}}
        </div>
        <!--開發版本(項目上線之后要替換成生產版本);生產版本:vue.min.js-->
        <script type="text/javascript" src="js/vue.js" ></script>
        <script type="text/javascript">
            var app=new Vue({
                el:"#app",
                data:{
                    messge:"變形金剛",
                    user:{
                        name:"張三",
                        age:18,
                        sex:""
                    }
                }
            });
            // 通過Vue實例可以直接修改data對象中的數據
            app.messge="修改后的變形金剛";
            app.user.name="王小二";
        </script>
    </body>
</html>

 

  2Vue中的數據(data)

  1 、Vue實例的數據保存在配置屬性data中, data自身也是一個對象.

  2、通過Vue實例直接訪問和修改data對象中的數據,及時同步的頁面上

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <div id="app">
            <h3> {{messge}}</h3>
        </div>
        <div class="cla">
            <h3> {{messge}}</h3>
        </div>
        <!--開發版本(項目上線之后要替換成生產版本);生產版本:vue.min.js-->
        <script type="text/javascript" src="js/vue.js" ></script>
        <script type="text/javascript">
            var app=new Vue({
                el:"#app",
                data:{
                    messge:"變形金剛"
                }
            });
            
            var ha= new Vue({
                el:".cla",
                data:{
                    messge:"搬磚的程序員"
                }
            });
        </script>
    </body>
</html>

 

  3Vue中的方法(methods)

  1、Vue實例的方法保存在配置屬性methods中,methods自身也是一個對象. 該對象中值都是方法體

  2、方法都是被Vue對象調用,所以方法中的this代表Vue對象

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <div id="app">
            <h3> {{messge}}</h3>
            {{haa()}}
        </div>
        <!--開發版本(項目上線之后要替換成生產版本);生產版本:vue.min.js-->
        <script type="text/javascript" src="js/vue.js" ></script>
        <script type="text/javascript">
            var app=new Vue({
                el:"#app",
                data:{
                    messge:"變形金剛",
                    user:{
                        name:"張三",
                        age:18,
                        explain:"過來啊!"
                    }
                },
                methods:{
                    //方法寫法一:
                    haa:function(){
                        return this.user.name+this.user.explain+"我請你吃糖果";
                    },
                    //方法寫法二:
                    yaa(){
                        //跳出一個彈窗
                        alert(this.messge+"是鋼鐵直男");
                    }
                }
            });
            app.yaa();
        </script>
    </body>
</html>

 

  4vue數據雙向綁定

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <div id="app">
            <!--監聽input中值的改變同步到data中的message上:
                v-model:數據的綁定;
                將app對象中的message值綁定到input中,同時輸入input值后,也作用於app的message值。
            -->
            <h3> {{messge}}</h3>
            <input type="text" v-model="messge" />
        </div>
        <!--開發版本(項目上線之后要替換成生產版本);生產版本:vue.min.js-->
        <script type="text/javascript" src="js/vue.js" ></script>
        <script type="text/javascript">
            var app=new Vue({
                el:"#app",
                data:{
                    messge:"變形金剛",
                }
            });
            
        </script>
    </body>
</html>

 

五、Vue架構的認識:

  Vue是一款開源的JavaScript MV*(MVVM、MVC)框架。

  Vue引入了MVVM (Model-View-ViewModel)模式,他不同於MVC架構.

 

  MVC模式:

  Model: 數據模型,一些JavaScript 對象,比如 {name : "小小強",age : 16};

  View:   視圖,網頁中的內容,一般由HTML模板生成。

  Controller : 控制器(路由),視圖和模型之間的膠水。

 

  MV VM模式:

  Model:它是與應用程序的業務邏輯相關的數據的封裝載體,它是業務領域的對象,Model並不關心會被如何顯示或操作,所以模型也不會包含任何界面顯示相關的邏輯。在web頁面中,大部分Model都是來自Ajax的服務端返回數據或者是全局的配置對象。


       View:它專注於界面的顯示和渲染,在Vue中則是包含一堆聲明式Directive和Component的視圖模板。

 

  ViewModel:它是View和Model的粘合體,負責View和Model的交互和協作,它負責給View提供顯示的數據,以及提供了View中Command事件操作Model的途徑;在vue中“Vue對象實例”充當了這個ViewModel的角色;

 

  View不能直接與Model交互,而是通過Vue實例這個ViewModel來實現與Model的交互。對於界面表單的交互,通過v-model指令來實現View和ViewModel的同步。對於View而言,ViewModel中的DOM Listeners工具會幫助我們監聽頁面上DOM元素的變化,一旦發生變化,Model中的數據也會發生改變;

  對於Model而言,當我們添加或修改Model中的數據時,ViewModel中的Data Bindings工具會幫助我們更改View中的DOM元素。從而實現View和Model的分離,達到對前端邏輯MVVM的分層架構。

 

六、VueJS表達式

  語法:

  VueJS表達式寫在雙大括號內:{{ expression }}。

  VueJS表達式把數據綁定到 HTML。

  VueJS將在表達式書寫的位置"輸出"數據。

  VueJS表達式 很像 JavaScript 表達式:它們可以包含文字、運算符和變量。

  實例 {{ 5 + 5 }} 或 {{ firstName + " " + lastName }}

  案例:

  1、簡單表達式

  在{{ }}中可以進行簡單的運算

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        
        <div id="app">
             <!--簡單表達式  -->
        <h1>{{5+5}}</h1>
        <!-- +:運算,字符串連接 -->
        <h1>{{5+"v5"}}</h1>
        <h1>{{5+"5"}}</h1>
        <!-- -:減法 -->
        <h1>{{"5"-"5"}}</h1>
        <h1>{{5*5}}</h1>
        <!-- *:乘 法 -->
        <h1>{{"5"*"5"}}</h1>
        <!-- / 除法-->
        <h1>{{5/5}}</h1>
        <h1>{{5/5}}</h1>

        </div>
        <!--開發版本(項目上線之后要替換成生產版本);生產版本:vue.min.js-->
        <script type="text/javascript" src="js/vue.js" ></script>
        <script type="text/javascript">
            var app=new Vue({
                el:"#app"
            });
            
        </script>
    </body>
</html>

 

  2、三目表達式

  在{{}}中的表達式可以使用三元運算符,但是不能夠使用其他語句

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <div id="app">
            <!--三目運算  -->
            {{ show?"真":"假"}}
        </div>
        <!--開發版本(項目上線之后要替換成生產版本);生產版本:vue.min.js-->
        <script type="text/javascript" src="js/vue.js" ></script>
        <script type="text/javascript">
            var app=new Vue({
                el:"#app",
                data:{
                    show:true,
                }
            });
            
        </script>
    </body>
</html>

 

  3、字符串表達式

  1、直接使用字符串字面值作為字符串對象
     2、使用data中的字符串對象

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <div id="app">
            {{"這是字面值"}}<br/>
            {{"這是字面值".length}}<br/>
            {{message.length}}<br/>
            <!--從字符串索引1開始獲取,到索引5之前結束-->
            {{message.substring(1,5)}}<br/>
            <!--從字符串索引2開始獲取,到索引6之前結束;toUpperCase():將小寫變為大寫-->
            {{message.substring(2,6).toUpperCase()}}<br/>
            <!--substr(index,length):從index開始截取,截取length個字符串 -->
            {{message.substr (1,3)}}<br/>
        </div>
        <!--開發版本(項目上線之后要替換成生產版本);生產版本:vue.min.js-->
        <script type="text/javascript" src="js/vue.js" ></script>
        <script type="text/javascript">
            var app=new Vue({
                el:"#app",
                data:{
                    message:"我在data里面"
                }
            });
        </script>
    </body>
</html>

 

  4、對象表達式

         在表達式中可以使用data中定義的對象的各種用法.像使用js對象中的方法和屬性一樣

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <div id="app">
            {{messge}}<br/>
            {{JSON.stringify(messge)}}<br/>
            {{messge.toString()}}<br/>
            {{messge.name}}<br/>
            {{messge.age}}<br/>
            {{messge.getAge()}}<br/>
        </div>
        <!--開發版本(項目上線之后要替換成生產版本);生產版本:vue.min.js-->
        <script type="text/javascript" src="js/vue.js" ></script>
        <script type="text/javascript">
            var user ={
                name:"張三",
                age:19,
                getAge:function(){
                    return this.age;
                },
                toString:function(){
                    return "姓名:"+this.name+",年齡:"+this.age;
                }
            }
            var app=new Vue({
                el:"#app",
                data:{
                    messge:user
                }
            });
            
        </script>
    </body>
</html>

 

  5、數組表達式

  在表達式中可以使用JavaScript數組中的任何語法來操作數組.

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <div id="app">
            {{hobbys}}<br/>
            {{hobbys[0]}}<br/>
            {{hobbys.length}}<br/>
            {{hobbys.toString()}}<br/>
            <!--用“-----”將每個元素分隔開顯示-->
            {{hobbys.join("------")}}<br/>
        </div>
        <!--開發版本(項目上線之后要替換成生產版本);生產版本:vue.min.js-->
        <script type="text/javascript" src="js/vue.js" ></script>
        <script type="text/javascript">
            var app=new Vue({
                el:"#app",
                data:{
                     hobbys:["打游戲","踢足球",'看電視',"游泳"]
                }
            });
        </script>
    </body>
</html>

 

七、Vue指令

  1、什么是指令

     指令是一個帶有v-前綴的特殊標簽屬性, 指令屬性的值預期是單個JavaScript表達式.

  2、常見的指令

  v-text=“表達式”  設置標簽中的文本
  v-html=“表達式”  設置標簽中的html
  v-if=“表達式”    判斷條件   
  v-for=“表達式”   循環
  v-model=“表達式” 數據雙向綁定
  v-on=“表達式”    注冊事件

  3、指令的作用

  1、作用:  當表達式的值改變時,將其產生的連帶影響,響應式地作用於 DOM。

  2、一個標簽元素上可以出現多個指令屬性

  3、指令只能夠出現在Vue對象所掛載的標簽范圍內的標簽中

  4v-text指令

  注意事項:
    1、如果值是html的值,也不會作為普通的文本使用.
       2、標簽中的屬性值必須是data中的一個屬性.

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <div id="app">
            <span v-text="message"></span><br/>
            <span v-text="user.username"></span><br/>
        </div>
        <!--開發版本(項目上線之后要替換成生產版本);生產版本:vue.min.js-->
        <script type="text/javascript" src="js/vue.js" ></script>
        <script type="text/javascript">
            var app=new Vue({
                el:"#app",
                data:{
                    message: "<h1>這是一個Span!</h1>",
                    user: {
                        username: "李李"
                    },
                }
            });
        </script>
    </body>
</html>

 

  5v-html指令

      注意事項:
      1、{{表達式}} 可以插入的標簽的內容中
     2、v-text和v-html更改標簽中的所有內容
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <div id="app">
            <!--將message的值解析為html來執行-->
            <div v-html="message"></div>
        </div>
        <!--開發版本(項目上線之后要替換成生產版本);生產版本:vue.min.js-->
        <script type="text/javascript" src="js/vue.js" ></script>
        <script type="text/javascript">
            var app=new Vue({
                el:"#app",
                data:{
                    message: "<h1>這是一個Html!</h1>",
                }
            });
        </script>
    </body>
</html>

 

  6v-for指令

       數組:

       1、v-for="元素 in 數組"(v-for="ele in arr")

        2、v-for="(元素,索引) in 數組"(v-for="(ele,index) in arr")

    對象:

       1、v-for="值in 對象"(v-for="value in obj")

        2、v-for="(值,鍵) in 對象"(v-for="(value,key) in obj")

        3、v-for=(值,鍵,索引) in 對象(v-for=(value,key,index) in obj)

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <div id="app">
             <h1>循環數組</h1>
            <ul>
                <li v-for="hobby in hobbys">{{hobby}}</li>
            </ul>
             <h1>遍歷對象</h1>
            <ul>
                <li v-for="value in student">{{value}}</li>
            </ul>
        
            <h1>帶索引循環數組</h1>
            <ul>
                <li v-for="(hobby,index) in hobbys">{{index}}--{{hobby}}</li>
            </ul>
            <h1>帶鍵遍歷對象</h1>
            <ul>
                <li v-for="(value,key,index) in student">{{index+1}}---{{key}}--{{value}}</li>
            </ul>
        </div>
        <!--開發版本(項目上線之后要替換成生產版本);生產版本:vue.min.js-->
        <script type="text/javascript" src="js/vue.js" ></script>
        <script type="text/javascript">
            var app=new Vue({
                el:"#app",
                data:{
                    hobbys : ["爬山","游泳","打豆豆","睡覺"],
                    student : {
                        name: "小毛",
                        age: 2,
                        sex: "",
                    },
                    num : 10,
                    str : "itsource",
                }
            });
            
        </script>
    </body>
</html>

 

  7v-bind指令

       1、v-bind:屬性名="表達式"(v-bind:src=”路徑”簡寫:src=”路徑”)

  2、v-bind=”對象”

       注意:
        將一個對象 鍵 和 值 作為標簽的屬性的名字和值時,在v-bind后不需要指定屬性的名字

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <!--
            v-bind指令
            作用:將html的屬性和Vue實例data值綁定到一起
            語法1:
            v-bind:屬性名="表達式"
            語法2:
            :屬性名="表達式"
            
            語法3:
            v-bind="對象"
        -->
        <div id="app">
            <iframe v-bind:src="src"></iframe><br />
            <iframe :src="src"></iframe><br />
            <!--<iframe src="http://www.baidu.com" class="myIframe"></iframe>-->
            <!--<iframe v-bind="attr"></iframe>-->
            <iframe :src="attr.src" :class="attr.class"></iframe><br />
        </div>
        <!--開發版本(項目上線之后要替換成生產版本);生產版本:vue.min.js-->
        <script type="text/javascript" src="js/vue.js" ></script>
        <script type="text/javascript">
            var app=new Vue({
                el:"#app",
                data:{
                    src:"http://www.baidu.com",
                    attr:{
                        src:"http://www.baidu.com",
                        class:"myIframe"
                    }
                }
            });
            
        </script>
    </body>
</html>

 

  8v-model指令

       1、v-model只作用於以下表單:
        input、  select、 textarea

  注意:在input標簽中,當v-model和value屬性都存在的時候,在前台頁面上展示的是v-model的值,但value的值卻沒有改變,提交表單時提交的還是value值。

復選框v-mode表達式的值為一個數組。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <div id="app">
            <input v-model="message" value="這是value值" /><br />
            愛好:
            <input type="checkbox" v-model="hobby" value="1"/><input type="checkbox" v-model="hobby" value="2"/><input type="checkbox" v-model="hobby" value="3"/>rap
            性別
            <input type="radio" v-model="sex" value="1"/>man
            <input type="radio" v-model="sex" value="2"/>woman
        </div>
        <!--開發版本(項目上線之后要替換成生產版本);生產版本:vue.min.js-->
        <script type="text/javascript" src="js/vue.js" ></script>
        <script type="text/javascript">
            var app=new Vue({
                el:"#app",
                data:{
                    message:"dbl",
                    hobby:[1,2],
                    sex:2
                }
            });
        </script>
    </body>
</html>

 

  9v-show指令

  <標簽名 v-show="真假表達式"></標簽名>

  如果v-show="真",標簽中添加display:none樣式

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <div id="app">
            <!--
                v-show:
                語法:
                v-show="真假表達式"
                如果表達式為假,相當於是在這個標簽上添加css樣式:display:none(相當於隱藏了)
            -->
            <p v-show="isShow">我是07</p>
        </div>
        </div>
        <!--開發版本(項目上線之后要替換成生產版本);生產版本:vue.min.js-->
        <script type="text/javascript" src="js/vue.js" ></script>
        <script type="text/javascript">
            var app=new Vue({
                el:"#app",
                data:{
                    isShow:true
                }
        });
        </script>
    </body>
</html>

 

  10v-if指令

        <標簽名 v-if="表達式"></標簽名>
  <標簽名 v-else-if="表達式"></標簽名>
  <標簽名 v-else-if="表達式"></標簽名>
  <標簽名 v-else></標簽名>

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <div id="app">
            <p v-if="money<10">中午不吃飯</p>
            <p v-else-if="money>=10&&money<20">吃牛肉面</p>
            <p v-else>吃拉面</p>
        </div>
        <!--開發版本(項目上線之后要替換成生產版本);生產版本:vue.min.js-->
        <script type="text/javascript" src="js/vue.js" ></script>
        <script type="text/javascript">
            var app=new Vue({
                el:"#app",
                data:{
                    money:15
                }
            });
            
        </script>
    </body>
</html>

 

八、事件

  v-on:事件名稱="表達式或者vue函數的調用"(例如:v-on:click="方法名()")

  簡寫:@事件名稱

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <div id="app">
            <button @click="clickMe(1)">點我試試</button>
            <button @click="clickMe(2)">點我試試</button>
        </div>
        <!--開發版本(項目上線之后要替換成生產版本);生產版本:vue.min.js-->
        <script type="text/javascript" src="js/vue.js" ></script>
        <script type="text/javascript">
            var app=new Vue({
                el:"#app",
                data:{
                    money:15
                },
                methods:{
                    clickMe(num){
                        alert(num)
                    }
                }
            });
        </script>
    </body>
</html>

 

九、綜合練習

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>vue綜合練習</title>
        <style type="text/css">
            td{
                align-content: center;
            }
        </style>
    </head>
    <body>
        <div id="app">
            <h3>購物車</h3>
            <h4 v-if="products.length==0">空空如也</h4>
            <div v-else>
                <table border="1" cellspacing="0" align="center">
                    <tr>
                        <th>編號</th>
                        <th>商品名稱</th>
                        <th>商品價格</th>
                        <th>商品數量</th>
                        <th>操作</th>
                    </tr>
                    <tr v-for="(product,index) in products">
                        <td>{{index+1}}</td>
                        <td>{{product.name}}</td>
                        <td>{{product.price}}</td>
                        <td><button @click="reduce(index)">-</button>{{product.num}}<button @click="add(index)">+</button></td>
                        <td><button @click="del(index)">刪除</button></td>
                    </tr
                    <tr>
                        <td colspan="5">總價:{{total}}</td>
                    </tr>
                </table>
            </div>
        </div>
        <script type="text/javascript" src="js/vue.js" ></script>
        <script>
            var app = new Vue({
                el: "#app",
                data: {
                    products:[
                        {id:1,name:"西瓜",price:20.00,num:4},
                        {id:2,name:"牛奶",price:30.00,num:2},
                        {id:3,name:"榴蓮",price:80.00,num:1}
                    ],
                    total:0
                },
                methods:{
                    //新版本寫法:del(){}
                    //刪除商品
                    del:function(index){
                        this.count();
                        this.products.splice(index,1);
                    },
                    //商品數量增加
                    add:function(index){
                        this.count();
                        this.products[index].num++;
                    },
                    //商品數量減少
                    reduce:function(index){
                        this.count();
                        //購物車中一種商品的數量至少為1個
                        if(this.products[index].num>1) {
                            this.products[index].num--;
                        }
                    },
                    //計算商品總價格
                    count:function(){
                        this.total=0;
                        for(var i in this.products){
                            this.total+=this.products[i].price*this.products[i].num;
                        }
                    }
                },
                //最后運行
                mounted(){
                    this.count();
                }
            });

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM