1. 程式人生 > >認識Vue.js的元件和模板

認識Vue.js的元件和模板

   指令是Vue.js中一個重要的特性,

        主要提供了一種機制將資料的變化對映為DOM行為。

        那什麼交資料的變化對映為DOM行為,

        學習了Vue.js是通過資料驅動的,

        所以我們不會直接去修改DOM結構,

        不會出現類似$('ul').append('<li>one</li>')這樣的操作,

        當資料變化時,指令會一句設定好的操作對DOM進行修改,

        這樣就可以只關注資料的變化,

        而不用去管理DOM的變化和狀態,

        使邏輯更加清晰,可維護性更好。

        Vue.js本身就提供了大量內建指令來進行對DOM的操作,

        我們也可以開發自定義的指令。

        接下來給大家介紹一下常見指令的應用場景以及

        自定義指令的開發和指令相關的引數。

Vue的內建指令

1. v-bind

v-bind主要用於繫結DOM元素屬性(attribute),

即元素屬性實際的值是有vm例項中的data屬性提供的。

例如:

<!doctype html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title
>Vue的指令</title>
   <script src="../vue.js"></script>
</head>
<body>
<!-- HTML模版 -->
<div id="demo">
   <span v-bind:cutomId="id">{{message}}</span>
</div>
<script>
   //資料
   
let obj ={
       message:"Hello World",
       id:'123'
   
};
 //宣告式渲染
   
var vm = new Vue({
       el:'#demo',
       data:obj
   
});
</script>
</body>
</html>

v-bind可以簡寫為“:”,

上述例子可以簡寫為<span :cotomId="id">

實現效果如下:


2. v-on

繫結事件監聽器,簡寫為@。

昨天我們也用過,我們簡寫一下看一下效果

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>Vue的指令</title>
   <script src="../vue.js"></script>
</head>
<body>
   <!-- HTML模版 -->
   
<div id="demo">
       <span @click="clickHandle">{{message}}</span>
   </div>
   <script>
       //資料
       
let obj = {
           message:"hello Vue"
       
};
       //宣告式渲染
       
var vm = new Vue({
           el:"#demo",
           data:obj,
           methods:{
               clickHandle(){
                       alert("click")
                       }
           }
       });
   </script>
</body>
</html>

效果和昨天一樣的


3.v-html

v-html,引數型別為string,

作用為更新innerHTML,

接受的字串不會進行編譯等操作,

按普通HTML處理

程式碼如下

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>Vue的指令</title>
   <script src="../vue.js"></script>
</head>
<body>
<!-- HTML模版 -->
<div id="demo" v-html="HTML"></div>
<script>
   //資料
   
let obj = {
       HTML:"<div>Hello World</div>"
   
};
   var vm = new Vue({
       el:"#demo",
       data:obj
   
})
</script>
</body>
</html>

實現效果如下


更多內建指令請查詢官網:Vue.js指令

模板

html模板

        基於DOM的模板,模板都是可解析有效的html

插值

文字:使用“Mustache”語法(雙大括號){{value}}

    作用:替換例項上的屬性值,

    當值改變時,插值內容就會自動更新

原生的html:雙大括號輸出的是文字,不會解析html

屬性:使用v-bind進行繫結,可以響應變化

使用JavaScript表示式:可以寫簡單的表示式

字串模板

template字串

        template選項物件的屬性

        模板將會替換掛在元素。掛在元素的內容都將被忽略。

程式碼如下

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>template模板</title>
   <script src="../vue.js"></script>
</head>
<body>
   <!--HTML模板-->
   
<div id="demo"></div>
   <script>
       //資料
       
let obj = {
           html:"<div>String</div>",
           abc:1
       
};
       var str = "<div>Hello</div>";
       var vm = new Vue({
           el:"#demo",
           data:obj,
           template:str
       
})
   </script>
</body>
</html
>

有木有發現什麼驚奇的變化


        根節點只能有一個

        將html結構寫在一對script標籤中,設定type="X-template"

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>template模板</title>
   <script src="../vue.js"></script>
</head>
<body>
   <!--HTML模板-->
   
<div id="demo">
       <span>vue</span>
   </div>
   <script type="x-template" id="temp">
       <div>
           Hello,{{abc}},
           
<span>sunday</span>
       </div>
   </script>
   <script>
       //資料
       
let obj = {
           html:"<div>String</div>",
           abc:1
       
};
       var vm = new Vue({
           el:"#demo",
           data:obj,
           template:"#temp"
       
});
   </script>
</body>
</html>

實現效果如下:


寫在script標籤中,還是比較侷限,

如果別的檔案也是這個結構的時候,

這個就不能重複使用。

模板render函式

render函式

  render 選項物件的屬性

  createElement(標籤名,{資料物件},[子元素]);

  子元素為文字或者陣列

我們還是來一段程式碼演示

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>render函式</title>
   <script src="../vue.js"></script>
   <style type="text/css">
       .bg{
           background: #ee0000;
       }
   </style>
</head>
<body>
   <div id="demo"></div>
   <script>
       //資料
       
let obj = {
           
       };
       var vm = new Vue({
           el:"#demo",
           data:obj,
           render(createElement){
               return createElement(
                   //元素名
                   
"ul",
                   //資料物件
                   
{
                       class:{
                           bg:true
                       
}
                    },
                   //子元素
                   
[
                       createElement("li",1),
                       createElement("li",2),
                       createElement("li",3)
                   ]
               );
           }
       })
   </script>
</body>
</html>

實現效果如下


關於資料物件屬性,講情請參考官網的例子。