Vue模板語法(一)


Vue模板語法

一.插值

1.1.1 文本
{{msg}}
1.1.2 html
使用v-html指令用於輸出html代碼
1.1.3 屬性
HTML屬性中的值應使用v-bind指令
1.1.4 表達式
Vue提供了完全的JavaScript表達式支持
{{str.substr(0,6).toUpperCase()}}
{{ number + 1 }}
{{ ok ? 'YES' : 'NO' }}
<li v-bind:id="'list-' + id">我的Id是js動態生成的</li>

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="utf-8">
 5         <title>vue插值</title>
 6         <script src="https://cdn.bootcss.com/vue/2.6.10/vue.js"></script>
 7             </head>
 8             <body>
 9                 <div id="app">
10                     <ul>
11                         
12                         <li>
13                             <h3>文本</h3>
14                                {{msg}}
15                         </li>
16                         <li>
17                             <h3>Html字符串渲染</h3>
18                              <div v-html="htmlSter"></div>
19                         </li>
20                         <li>
21                             <h3>v-bind屬性綁定</h3>
22                              <input type="text" value="18" />
23                              <input type="text" v-bind:value="age" />
24                         </li>
25                         <li>
26                             <h3>表達式</h3>
27                                {{str.substr(0,6).toUpperCase()}}
28                                        {{ number + 1 }}
29                                        {{ ok ? 'YES' : 'NO' }}
30                                        <li v-bind:id="'list-' + id">我的Id是js動態生成的</li>
31                         </li>
32                     </ul>
33                 </div>        
34             </body>
35             <script type="text/javascript">            
36                 new Vue({
37                     el:'#app',
38                     data:{
39                         msg:'Hollo Vue!!!',
40                         htmlSter:'<span style="color: red;">Html字符串渲染</span>',
41                         age:20,
42                         str:'https://www.baidu.com',
43                         number:6,
44                         ok:true,
45                         id:16
46                     }
47                 })        
48             </script>
49         </html>
50         

二.指令

 指的是帶有“v-”前綴的特殊屬性

 

1.2.1 核心指令
(v-if|v-else|v-else-if)/v-show/v-for/v-bind/v-on/v-model/v-if|v-else|v-else-if:根據其后表達式的bool值進行判斷是否渲染該元素他們只能是兄弟元素

v-else-if上一個兄弟元素必須是v-if
v-else上一個兄弟元素必須是v-if或者是v-else-if

 

v-show:與v-if類似,只是會渲染其身后表達式為false的元素,而且會給這樣的元素添加css代碼:style="display:none"

 

v-for:類似JS的遍歷,
遍歷數組: v-for="item in items", items是數組,item為數組中的數組元素
遍歷對象: v-for="(value,key,index) in stu", value屬性值,key屬性名,index下標

 

v-bind
v-on
v-model:用來在 input、select、textarea、checkbox、radio 等表單控件元素上創建雙向數據綁定,根據表單上的值,自動更新綁定的元素的值
v-for/v-model一起綁定[多選]復選框和單選框

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="utf-8">
 5         <title>vue指令</title>
 6         <script src="https://cdn.bootcss.com/vue/2.6.10/vue.js"></script>
 7             </head>
 8             <body>
 9                 <div id="app">
10                     <ul>                    
11                         <li>
12                             <h3>分支</h3>
13                             <div v-if="score > 90">A</div>
14                             <div v-else-if="score > 70">B</div>
15                             <div v-else-if="score > 60">C</div>
16                             <div v-else-if="score < 50">D</div>
17                             <div v-else=" "></div>
18                                <input type="text" v-model="score" />
19                         </li>
20                         <!-- 分清楚v-fi跟v-show的區別 -->
21                         <!-- v-if:控制的是標簽是否打印 
22                              v-show:控制的是標簽的樣式
23                         -->                        
24                         <li>
25                             <h3>v-show指令</h3>
26                             <div v-show="flag">hollo</div>
27                             <div v-if="flag">hollo !!!</div>
28                         </li>
29                         <li>
30                             <h3>v-for指令</h3>
31                             <div v-for="item,index in data1">
32                                 {{item}}~{{index}}<br />                                                                                
33                             </div>
34                             <hr />
35                             <div v-for="item,index in data2">
36                                 {{item.id}}~{{item.name}}~{{index}}<br />                                                                                
37                             </div>
38                         </li>
39                         <li>
40                             <h3>動態參數</h3>
41                             <button v-on:[evname]="xxx">動態參數</button>
42                             <input type="text" v-model="evname" />
43                         </li>
44                     </ul>
45                 </div>        
46             </body>
47             <script type="text/javascript">            
48                 new Vue({
49                     el:'#app',
50                     data:{
51                         score:88,
52                         flag:false,
53                         data1:[1,3,6,9,11],
54                         data2:[{
55                             id:1,
56                             name:'!!!'
57                             },
58                             {
59                                 id:2,
60                                 name:'......'
61                                 },
62                                 {
63                                     id:3,
64                                     name:'。。。'
65                                     }
66                             ],
67                             evname:'click'
68                         
69                     },
70                     methods:{
71                         xxx(){
72                             console.log('方法被調用!!!')
73                         }
74                     }
75                 })        
76             </script>
77         </html>
78         

三. 過濾器

全局過濾器
Vue.filter('filterName', function (value) {
// value 表示要過濾的內容
});
局部過濾器
new Vue({
filters:{'filterName':function(value){}}
});

vue允許你自定義過濾器,被用作一些常見的文本格式化,格式如下:
<!-- 在兩個大括號中 -->
{{ name | capitalize }}

<!-- 在 v-bind 指令中 -->
<div v-bind:id="rawId | formatId"></div>
注1:過濾器函數接受表達式的值作為第一個參數
注2:過濾器可以串聯
{{ message | filterA | filterB }}
注3:過濾器是JavaScript函數,因此可以接受參數:
{{ message | filterA('arg1', arg2) }}

注4:js定義一個類
function Stu(){};
Stu.prototype.add(a,b){};//添加一個新的實例方法
Stu.update(a,b){};//添加一個新的類方法

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="utf-8">
 5         <title>vue過濾器</title>
 6         <script src="https://cdn.bootcss.com/vue/2.6.10/vue.js"></script>
 7             </head>
 8             <body>
 9                 <div id="app">
10                     <ul>                    
11                         <li>
12                             <h3>局部過濾器注冊</h3>
13                             {{msg}}<br />
14                             {{msg | a}}<br />
15                             {{javax1 | a}}<br />
16                         </li>
17                         <li>
18                             <h3>局部過濾器串聯</h3>
19                             {{javax1 | a | b}}
20                         </li>
21                         <li>
22                             <h3>全局過濾器注冊</h3>
23                             {{javax1 | c}}
24                         </li>
25                         
26                     </ul>
27                 </div>        
28             </body>
29             <script type="text/javascript">    
30                     Vue.filter(
31                     'c',function(v){
32                         console.log(v);
33                             return v.substring(10,16);
34                     }
35                     ),
36                 new Vue({
37                     el:'#app',
38                     data:{
39                     msg:'https://www.baidu.com',
40                     javax1:'https://www.javax1.com'
41                     },
42                     filters:{
43                         'a':function(v){
44                         console.log(v);
45                             return v.substring(0,16);
46                         },
47                         'b':function(v){
48                         console.log(v);
49                             return v.substring(5,10);
50                         }
51                     }
52                 })        
53             </script>
54         </html>
55         

四.計算機屬性與監聽屬性

4. 計算屬性
計算屬性可用於快速計算視圖(View)中顯示的屬性。這些計算將被緩存,並且只在需要時更新
computed:{}

5. 監聽屬性
監聽屬性 watch,我們可以通過 watch 來響應數據的變化
watch:{}

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="utf-8">
 5         <title>Vue計算監聽</title>
 6         <script src="https://cdn.bootcss.com/vue/2.6.10/vue.js"></script>
 7     </head>
 8     <body>
 9         <div id="app">
10             <ul>
11                 <li>
12                     <h3>計算屬性</h3>
13                     單價:<input v-model="price" />
14                     數量:<input v-model="num" />
15                     總價: {{total}}
16                 </li>
17                 <li>
18                     <h3>監聽屬性</h3>
19                     km:<input v-model="km"/>
20                     m:<input v-model="m" />
21                 </li>
22             </ul>
23         </div>        
24     </body>
25     <script type="text/javascript">
26         new Vue({
27             el:'#app',
28             data:{
29                 price:15,
30                 num:1,
31                 km:1,
32                 m:1000
33             },
34             computed:{
35                 total(){
36                     return parseInt(this.price) * parseInt(this.num);
37                 }
38             },
39             watch:{
40                 km(v){
41                     this.m = v * 1000;
42                 },
43                 m(v){
44                     this.km = v/1000;
45                 }
46             }
47         })        
48     </script>
49 </html>

 


免責聲明!

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



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