Javascript

vue模板语法上

本文主要是介绍vue模板语法上,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

本期内容

        1、插值

        2、指令

        3、过滤器

        4、计算属性&监听属性

HBuilder X 软件中代码格式化:Ctrl+K

一、插值

1、文本

         {{msg}}

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
    </head>
    <body>
        <!-- 定义边界 -->
        <div id="app">
            <h3>{{msg}}</h3>
        </div>
    </body>
    
    <script type="text/javascript">
        <!-- 绑定边界 -->
        new Vue({
            el:'#app',
            data() {
                return {msg:'欢迎幻影'};
            }
        })
    </script>
</html>

2、html

           使用v-html指令用于输出html代码        

 <!DOCTYPE html>

<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
    </head>
    <body>
        <!-- 定义边界 -->
        <div id="app">
            <p>文本</p>
            <h3>{{msg}}</h3>
            <p>html串,显示带红色字体的内容</p>
            <div v-html="htmlstr"></div>
        </div>
    </body>

    <script type="text/javascript">
        <!-- 绑定边界 
        -->
        new Vue({
            el: '#app',
            data(){
                return{
                    msg: '欢迎幻影',
                    htmlstr:'<h3 style="color:red;">html片段</h3>'
            };
        }
        })
    </script>
</html>

3、属性

        HTML属性中的值应使用v-bind指令

所有原生态的属性,要利用vue的变量,都需要在对应的属性前加v-bind

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
    </head>
    <body>
        <!-- 定义边界 -->
        <div id="app">
        <p>文本</p>
            <h3>{{msg}}</h3>
        <p>html串,显示带红色字体的内容</p>
            <div v-html="htmlstr"></div>
        <p>vue中的属性</p>
            <a v-bind:href="hrefstr">百度</a>
            <input v-bind:value="valuestr" />

            <!-- 缩写方式 -->
            <!-- <input :value="valuestr" /> -->

        </div>
    </body>

    <script type="text/javascript">
        <!-- 绑定边界 
        -->
        new Vue({
            el: '#app',
            data(){
                return{
                    msg: '欢迎幻影',
                    htmlstr:'<h3 style="color:red;">html片段</h3>',
                    hrefstr:'http://www.baidu.com',
                    valuestr:"23546"

            };
        }
        })
    </script>
</html>

 4、表达式

         Vue提供了完全的JavaScript表达式支持
          {{str.substr(0,6).toUpperCase()}}
          {{ number + 1 }}
          {{ ok ? 'YES' : 'NO' }}
          <li v-bind:id="'list-' + id">我的Id是js动态生成的</li>

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
    </head>
    <body>
        <!-- 定义边界 -->
        <div id="app">
        <p>文本</p>
            <h3>{{msg}}</h3>
        <p>html串,显示带红色字体的内容</p>
            <div v-html="htmlstr"></div>
        <p>vue中的属性</p>
            <a v-bind:href="hrefstr">百度</a>
            <input v-bind:value="valuestr" />
            <!-- v-bind:value缩写方式 -->
            <!-- <input :value="valuestr" /> -->
        <p>表达式</p>
            <p>截取字符串并转大写</p>
            {{str.substring(0,4).toUpperCase()}}
            <p>数值相加</p>
            张三:{{number+1}}
            <p>判断</p>
            {{ok ? 'yes':'no'}}
            <p>动态生成id</p>
            <span :id="'goodsid_id_'+id">xxxxx</span>

        </div>
    </body>

    <script type="text/javascript">
        <!-- 绑定边界 
        -->
        new Vue({
            el: '#app',
            data(){
                return{
                    msg: '欢迎幻影',
                    htmlstr:'<h3 style="color:red;">html片段</h3>',
                    hrefstr:'http://www.baidu.com',
                    valuestr:"23546",
                    str:'java is very good',
                    number:59,
                    ok:true,
                    id:66

            };
        }
        })
    </script>
</html>

 

二、 指令

          指的是带有“v-”前缀的特殊属性

1、核心指令

         v-if|v-else|v-else-if:根据其后表达式的bool值进行判断是否渲染该元素
            他们只能是兄弟元素
         v-else-if上一个兄弟元素必须是v-if
         v-else上一个兄弟元素必须是v-if或者是v-else-if

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
    </head>
    <body>
        <!-- 定义边界 -->
        <div id="app">
            <p> v-if|v-else|v-else-if</p>
            
        分数:<input v-model="score" />
            
        <div v-if="score>80">优秀</div>
            
        <div v-else-if="score>60">良好</div>
            
        <div v-else="score<60">继续加油</div>

        <p>v-show</p>
                <div v-show="score>90">v-show-上优秀学员名单</div>
                <div v-if="score>90">v-if-上优秀学员名单</div>

        </div>
    </body>
    
    <script type="text/javascript">
        <!-- 绑定边界 -->
        new Vue({
            el:'#app',
            data() {
                return {
                    score:78
                };
            }
        })
    </script>
</html>

 根据用户在输入框中输入的数字判断成绩优良差:

v-if连div代码都不存在了 ,v-show只是display隐藏掉了 

v-show:与v-if类似,只是会渲染其身后表达式为false的元素,而且会给这样的元素添加css代                      码:style="display:none"

2、v-for

        类似JS的遍历

遍历数组: v-for="item in items", items是数组,item为数组中的数组元素
遍历对象: v-for="(value,key,index) in stu", value属性值,key属性名,index下标

下拉框:hobbySelected被选中的选项——回显,以及可以根据后面的输入框填入的进行下拉框选中

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
    </head>
    <body>
        <!-- 定义边界 -->
        <div id="app">
          <p>v-for</p>    
               <select v-model="hobbySelected">
                    <option v-for="h in hobby" :value="h.id">{{h.name}}</option>
                </select>
                <input v-model="hobbySelected" />

        </div>
    </body>
    
    <script type="text/javascript">
        <!-- 绑定边界 -->
        new Vue({
            el:'#app',
            data() {
                return {
                    hobby:[
                        {id:"1",name:"唱歌"},
                        {id:"2",name:"跳舞"},
                        {id:"3",name:"打游戏"}
                    ],
                    hobbySelected:3

                };
            }
        })
    </script>
</html>

复选框:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
    </head>
    <body>
        <!-- 定义边界 -->
        <div id="app">
           <p>v-for</p>    
                <div v-for="h in hobby">
                <input  :value="h.id" type=checkbox />{{h.name}}
                </div>
        </div>
    </body>
    
    <script type="text/javascript">
        <!-- 绑定边界 -->
        new Vue({
            el:'#app',
            data() {
                return {
                    score:78,
                    hobby:[
                        {id:"1",name:"唱歌"},
                        {id:"2",name:"跳舞"},
                        {id:"3",name:"打游戏"}
                    ],
                                 };
            }
        })
    </script>
</html>

3、v-on:触发事件 :

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
    </head>
    <body>
        <!-- 定义边界 -->
        <div id="app">
           <p>v-on</p>
                <button v-on:click="handle">触发事件</button>
            <p>v-on缩写</p>
                <!-- <button @click="handle">触发事件</button> -->

        </div>
    </body>
    
    <script type="text/javascript">
        <!-- 绑定边界 -->
        new Vue({
            el:'#app',
            data() {
                return {
                    score:78,
                    hobby:[
                        {id:"1",name:"唱歌"},
                        {id:"2",name:"跳舞"},
                        {id:"3",name:"打游戏"}
                    ],
                    hobbySelected:3
                };
            },
            methods:{
                handle(){
                    alert("触发事件");
                }
            }

        })
    </script>
</html>

三、动态参数 

         注1:动态参数表达式有一些语法约束,evName无效,evname有效,回避大写

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
    </head>
    <body>
        <!-- 定义边界 -->
        <div id="app">
            <p>动态参数</p>
                <button v-on:[evname]="handle">动态参数</button>

        </div>
    </body>
    
    <script type="text/javascript">
        <!-- 绑定边界 -->
        new Vue({
            el:'#app',
            data() {
                return {
                    /* 当evname里面的值换成了dblclick时,双击才能触发事件 */
                    evname:'click',

                    
                };
            },
            methods:{
                handle(){
                    alert("触发事件");
                }
            }

        })
    </script>
</html>

 四、过滤器

1、全局过滤器:

   Vue.filter('filterName', function (value) {
     // value 表示要过滤的内容
   });

2、局部过滤器

  new Vue({
     filters:{'filterName':function(value){}}
   });

3、串联

4、过滤器可以传参的

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
    </head>
    <body>
        <!-- 定义边界 -->
        <div id="app">
            {{msg|all}},{{msg|single}},{{msg|all|single}},{{msg|param(4,5)}}
        </div>
    </body>
    
    <script type="text/javascript">
    //全局过滤器
        Vue.filter('all', function (value) {
             return value.substring(2,6);
           });

        <!-- 绑定边界 -->
        new Vue({
            el:'#app',
            data() {
                return {
                    msg:"吃素并不能减肥,想想猪八戒"
                };
            },
            // 局部过滤
            filters:{
                'single':function(val){
                    return val.substring(2,3);
                },

                'param':function(val,start,end){
                    return val.substring(start,end);
                }

            }
        })
    </script>
</html>

五、计算属性&监听属性

        计算属性没有在变量中定义的

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
    </head>
    <body>
        <!-- 定义边界 -->
        <div id="app">
            <p>计算属性</p>
            <table border="1" style="width: 600px;height: 300px;">
                <tr>
                    <td>帽子</td>
                    <td>30</td>
                    <td>
                        <input v-model="maozi" />
                    </td>
                    <td>
                        {{maoziTotal}}
                    </td>
                </tr>
                <tr>
                    <td>鞋子</td>
                    <td>28</td>
                    <td>
                        <input v-model="xiezi" />
                    </td>
                    <td>
                        {{xieziTotal}}
                    </td>
                </tr>
                <tr>
                    <td>裤子</td>
                    <td>12</td>
                    <td>
                        <input v-model="kuzi" />
                    </td>
                    <td>
                        {{kuziTotal}}
                    </td>
                </tr>
                <tr>
                    <td>总价</td>
                    <td colspan="3">{{total}}</td>
                </tr>
            </table>

        <p>监听属性</p>
            千米:<input v-model="km" />
            米:<input v-model="m" />

        </div>
    </body>
    
    <script type="text/javascript">
           <!-- 绑定边界 -->
        new Vue({
            el:'#app',
            data() {
                return {
                    maozi:1,
                    xiezi:1,
                    kuzi:1,

                    km:2,
                    m:2000

                };
            },
            methods:{
                handle(){
                    alert("触发事件");
                }
            },
            // 计算属性
             computed:{
                 maoziTotal(){
                     return this.maozi*30;
                 },
                 xieziTotal(){
                     return this.xiezi*28;
                 },
                 kuziTotal(){
                      return this.kuzi*12;
                 },
                 total(){
                     return this.maoziTotal+this.xieziTotal+this.kuziTotal;
                 }
             },

             // 监听属性
             watch:{
                 // v指的是m变量
                 m(v){
                     this.km=parseInt(v)/1000
                 },
                 // v指的是km变量
                 km(v){
                     this.m=parseInt(v)*1000
                 }
             }

        })
    </script>
</html>

 

本期内容结束~

这篇关于vue模板语法上的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!