vue模板语法上集(插值、指令、过滤器、计算属性与监听属性)

1, 插值

文本:{{msg}}

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

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

表达式:Vue提供了完全的JavaScript表达式支持 如:
          {{str.substr(0,6).toUpperCase()}}
          {{ number + 1 }}
          {{ ok ? 'YES' : 'NO' }}

运行结果


       <li v-bind:id="'list-' + id">我的Id是js动态生成的</li>

2,指令

        指的是带有“v-”前缀的特殊属性
核心指令
          (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一起绑定[多选]复选框和单选框  

<!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>
        <!-- vue编码 -->
        <!-- 定义边界 -->
        <div id="app">
            <h2><p>①v-if|v-else|v-else-if</p></h2>
            分数:<input v-model="score" />
            <div v-if="score>80">优秀</div>
            <div v-else-if="score>60">良好</div>
            <div v-else="score<60">还需努力</div>
            
            <h2><p>②v-show</p></h2>
            <div v-show="score>90">v-show优秀名单</div>
            <div v-="score>90">v-if优秀名单</div>
            
            <h2><p>③v-for</p></h2>
            <select v-model="hobbySelected">
                <option v-for="h in hobby" :value="h.id">{{h.name}}</option>
            </select>
            <input v-model="hobbySelected" />
            <div v-for="h in hobby">
                <input :value="h.id" type="checkbox"/>{{h.name}}
            </div>
            <h2><p>④v-on</p></h2>
            <button v-on:click="handle">弹出框1</button>
            <button @click="handle">弹出框2</button>
        </div>
    </body>
    <script type="text/javascript">
        /* 绑定边界 */
        new Vue({
                    el: '#app',
                    data() {
                        return {
                            msg: '元气森林你好!',
                            score:78,
                            hobby:[
                                {id:"1",name:"唱歌"},
                                {id:"2",name:"做美甲"},
                                {id:"3",name:"打游戏"}
                                ],
                                hobbySelected:1
                            };
                        },
                        methods:{
                            handle(){
                                alert("弹出框1");
                            }
                        }
                    })
    </script>
</html>

运行结果

 
参数
          一些指令能够接收一个“参数”,在指令名称之后以冒号表示,例如:
          <a v-bind:href="url">...</a>
          在这里href是参数,告知v-bind指令将该元素的href属性与表达式url的值绑定 
          <a v-on:click="doSomething">...</a>
          在这里click参数是监听的事件名。

动态参数
          从2.6.0开始,可以用方括号括起来的JavaScript表达式作为一个指令的参数
          <a v-bind:[attrname]="url"> ... </a>

          同样地,你可以使用动态参数为一个动态的事件名绑定处理函数
          <a v-on:[evname]="doSomething"> ... </a>

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

运行结果

dblclick当你单机时不会弹出  双击就会


修饰符
          修饰符 (modifier) 是以半角句号 . 指明的特殊后缀,用于指出一个指令应该以特殊方式绑定。
          例如:.prevent 修饰符告诉 v-on 指令对于触发的事件调用 event.preventDefault()
        
          <form v-on:submit.prevent="onSubmit">...</form>
      
          注1:event.preventDefault()方法的作用?
               该方法将通知Web浏览器不要执行与事件关联的默认动作(如果存在这样的动作)

简写
          Vue为v-bind和v-on这两个最常用的指令,提供了特定简写
          <a v-bind:href="url">...</a>
          <a :href="url">...</a>
  
          <a v-on:click="doSomething">...</a>
          <a @click="doSomething">...</a> 

3,过滤器

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

   vue允许你自定义过滤器,被用作一些常见的文本格式化,格式如下:
   <!-- 在两个大括号中 -->
   {{ name | capitalize }}

   <!-- 在 v-bind 指令中 -->
   <div v-bind:id="rawId | formatId"></div>

运行结果

<!-- |all截取前面两个字母   3串联  4传参 -->


   
   注1:过滤器函数接受表达式的值作为第一个参数 
   注2:过滤器可以串联     
        {{ message | filterA | filterB }}
   注3:过滤器是JavaScript函数,因此可以接受参数: 
        {{ message | filterA('arg1', arg2) }}

   注4:js定义一个类
        function Stu(){};
        Stu.prototype.add(a,b){};//添加一个新的实例方法
        Stu.update(a,b){};//添加一个新的类方法

   案例:首字母大写/日期格式化


4. 计算属性

   计算属性可用于快速计算视图(View)中显示的属性。这些计算将被缓存,并且只在需要时更新
   computed:{}

   <!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>
        <!-- vue编码 -->
        <!-- 定义边界 -->
        <div id="app">
            <h2><p>计算机属性</p></h2>
            <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>390</td>
                    <td>
                        <input v-model="yifu" />
                    </td>
                    <td>{{yifuTotal}}</td>
                </tr>
                <tr>
                    <td>裤子</td>
                    <td>200</td>
                    <td>
                        <input v-model="kuzi" />
                    </td>
                    <td>{{kuziTotal}}</td>
                </tr>
                <tr>
                    <td>总价</td>
                    <td colspan="3">{{total}}</td>
                </tr>
            </table>
        </div>
    </body>
    <script type="text/javascript">
        Vue.filter('all',function(value){
            return value.substring(0,2);
        });
    
        /* 绑定边界 */
        new Vue({
            el: '#app',
            data() {
                return {
                    maozi:1,
                    yifu:1,
                    kuzi:1
                };
            },
            methods:{
                handle(){
                    alert("弹出框");
                }
            },
            computed:{
                maoziTotal(){
                    return this.maozi*30;
                },
                yifuTotal(){
                    return this.yifu*390;
                },
                kuziTotal(){
                    return this.kuzi*200;
                },
                total(){
                  return this.maoziTotal+this.yifuTotal+this.kuziTotal;
                }
            }
        })
    </script>
</html>

 

运行结果

5. 监听属性

 监听属性 watch,我们可以通过 watch 来响应数据的变化
   watch:{}

 <!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>
        <!-- vue编码 -->
        <!-- 定义边界 -->
        <div id="app">
            <h2><p>计算机属性</p></h2>
            <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>390</td>
                    <td>
                        <input v-model="yifu" />
                    </td>
                    <td>{{yifuTotal}}</td>
                </tr>
                <tr>
                    <td>裤子</td>
                    <td>200</td>
                    <td>
                        <input v-model="kuzi" />
                    </td>
                    <td>{{kuziTotal}}</td>
                </tr>
                <tr>
                    <td>总价</td>
                    <td colspan="3">{{total}}</td>
                </tr>
            </table>
            <h2><p>监听属性</p></h2>
            大:<input v-model="a" value="2"/>
            小:<input v-model="b" value="300" />

        </div>
    </body>
    <script type="text/javascript">
        Vue.filter('all',function(value){
            return value.substring(0,2);
        });
    
        /* 绑定边界 */
        new Vue({
            el: '#app',
            data() {
                return {
                    maozi:1,
                    yifu:1,
                    kuzi:1,
                    a:2,
                    b:2000

                };
            },
            methods:{
                handle(){
                    alert("弹出框");
                }
            },
            computed:{
                maoziTotal(){
                    return this.maozi*30;
                },
                yifuTotal(){
                    return this.yifu*390;
                },
                kuziTotal(){
                    return this.kuzi*200;
                },
                total(){
                  return this.maoziTotal+this.yifuTotal+this.kuziTotal;
                }
            },
            watch:{
                /* y值的是b变量 */
                b:function(y){
                    this.a=parseInt(y)/1000;
                },
                /* y值的是a变量 */
                a:function(y){
                    this.b=parseInt(y)*1000;
                }

            }
        })
    </script>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值