Vue-指令补充、过滤器、计数器属性、监听属性
vue实例成员:
el | template
|data | methods
 watch 监听事件| computed 计数属性使用
| filters过滤器 | props 父传子
 components渲染template中标签
一、表单指令(重要):
表单指令 v-model='变量',变量值与表单标签的value相关
v-model可以实现数据的双向绑定:v-model绑定的变量值可以影响表单标签的值,
反过表单标签的值也可以影响变量的值。
<div id="app">
    <form action="">
        <input type="text" name="user" id="user" placeholder="请输入账号" v-model="v1">
        <input type="text" v-model="v1">
        {{v1}}
        <hr>
        <!--单选框-->
        男:<input type="radio" name="sex" value="male" v-model="v2">
        女:<input type="radio" name="sex" value="female" v-model="v2">
        {{v2}}
        <hr>
        <!--单一复选框-->
        卖身契:同意 <input type="checkbox" name="agree" v-model="v3">
        {{v3}}
        <hr>
        <!--多复选框-->
        爱好:<br>
        男:<input type="checkbox" name="hobbies" value="male" v-model="v4">
        女:<input type="checkbox" name="hobbies" value="female" v-model="v4">
        其他:<input type="checkbox" name="hobbies" value="other" v-model="v4">
        {{v4}}
    </form>
</div>
<script src="js/vue.js"></script>
<script>
    new Vue({
        el: '#app',
        data:{
            v1:123,
            v2:'female',
            v3:false,
            v4:['other']
        },
    })
二、条件指令
条件指令:
 v-show='变量',隐藏的时候,采用的是display:none进行渲染
 v-if='布尔变量',隐藏时,不再页面中渲染(保证不渲染的数据泄露)
 三种形式:v-if | v-else-if | v-else
利用一个点击转换并且点击的按钮高亮的例子来渲染条件指令
<style>
    [v-cloak] {display: none}
    .box{
        width: 200px;
        height: 200px;
    }
    .r{
        background-color: red;
    }
    .b{
        background-color: blue;
    }
    .g{
        background-color: green;
    }
    .active{
        background-color: sandybrown;
    }
</style>
<div id="app" v-cloak>
    <div class="box r" v-show="is_show"> </div>
    <div class="box b" v-if="is_show"> </div>
    <div class="warp">
        <div>
            <button @click="page='r_page'" :class="{active:page==='r_page'}">红</button>
            <button @click="page='b_page'" :class="{active:page==='b_page'}">蓝</button>
            <button @click="page='g_page'" :class="{active:page==='g_page'}">绿</button>
        </div>
        <div class="box r" v-if="page==='r_page'"></div>
        <div class="box b" v-else-if="page==='b_page'"></div>
        <div class="box g" v-else></div>
    </div>
</div>
<script src="js/vue.js"></script>
<script>
    new Vue({
        el:'#app',
        data:{
            is_show:false,
            page:'r_page'
        }
    })
三、循环指令
循环指令:v-for="ele in string|array|obj"
<div id="app">
    <span>{{info}}</span>
    <hr>
    <!--对字符串循环-->
    <p v-for="(c,i) in info">{{i}}:{{c}}</p>
    <hr>
    <!--对数组循环-->
    <div v-for=" e in stus">{{e}}</div>
    <div v-for="(e,i) in stus ">{{i}}:{{e}}</div>
    <hr>
    <!--对对象也就是字典循环-->
    <!--这里v是值,i是变量,z是索引值-->
    <div v-for="(v,i,z) in people">{{v}}{{i}}{{z}}</div>
    <div v-for="teat in teats">
    <span v-for="(v,k,i) in teat "><span v-if="i !==0">|</span>{{k}}{{v}}</span>
    </div>
</div>
<script src="js/vue.js"></script>
<script>
    new Vue({
        el:'#app',
        data:{
            info:'good good study',
            stus:['A','B','C'],
            people:{
                name:'猴子',
                age:37,
                sex:'女',
            },
            teats:[
                {
                    name: 'jason',
                    age: 73,
                    sex: '男',
                },
                {
                    name: 'egon',
                    age: 74,
                    sex: '男',
                },
                {
                    name: 'owen',
                    age: 17.5,
                    sex: '男',
                }
            ]
        }
    })
</script>
循环留言板案例:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        li:hover{
            color: red;
            cursor: pointer;
        }
    </style>
</head>
<body>
<div id="app">
    <input type="text" v-model="comment">
    <button type="button" @click="send_msg">留言</button>
    <ul>
        <!--删除事件-->
        <li v-for="(msg,i) in msgs" @click="delete_msg(i)">{{msg}}</li>
    </ul>
</div>
</body>
<script src="js/vue.js"></script>
<script>
    new Vue({
        el: '#app',
        data: {
            comment: '',
            //localStorage前端的存储,下面的式子是个三元表达式
            //意思是如果有数据就用json转一下存起来,没有值就是空
            msgs: localStorage.msgs ? JSON.parse(localStorage.msgs) : [],
        },
        methods: {
            send_msg() {
                //将comment添加到msgs数组中:unshift push首尾增加;shift pop首尾删
                //this.msgs.push(this.comment);
                //数组操作最全的方法:splice(begin_index,count,...args)
                //this.msgs.splice(0,2);
                if (!this.comment) {
                    return false;
                }
                this.msgs.push(this.comment);
                this.comment = '';
                localStorage.msgs = JSON.stringify(this.msgs);
            },
            //删除数据
            delete_msg(index){
                //splice是从什么地方开始操作多少位操作什么!
                //下面的意思从index开始,操作一位,操作的值为空,也就是什么都没有
                this.msgs.splice(index,1);
                localStorage.msgs=JSON.stringify(this.msgs);
            }
        }
    })
</script>
</html>
四、过滤器
<div id="app">
    <p>{{ num | f1 }}</p>
    <p>{{ a, b | f2(30, 40) | f3 }}</p>
</div>
<script src="js/vue.js"></script>
<script>
    new Vue({
        el: '#app',
        data: {
            num: 10,
            a: 10,
            b: 20,
        },
        filters: {
            // 传入所有要过滤的条件,返回值就是过滤的结果
            f1 (num) {
                console.log(num);
                return num * 10;
            },
            f2 (a, b, c, d) {
                console.log(a, b, c, d);
                return a + b + c + d;
            },
            f3 (num) {
                return num * num;
            }
        }
    })
</script>
总结:1、在filters成员中定义过滤器方法;2、可以对多个值进行过滤,过滤时还可以额外传输辅助参数;3、过滤的结果可以再进行下一次过滤(过滤串联)
五、计数属性
<div id="app">
    <input type="number" min="0" max="100" v-model="n1">
    +
    <input type="number" min="0" max="100" v-model="n2">
    =
    <button>{{ result }}</button>
</div>
<script src="js/vue.js"></script>
<script>
    new Vue({
        el: '#app',
        data: {
            n1: '',
            n2: '',
            // result: 0,
        },
        computed: {
            result () {
                console.log('被调用了');
                n1 = +this.n1;
                n2 = +this.n2;
                //this前面加个+号,是将字符串类型转换成数字类型加减乘除
                return n1 + n2;
            }
        }
    })
</script>
总结:
1、computed计数属性可以声明方法属性(方法属性一定不能在data中重复声明)
2、方法 属性必须在页面中渲染,才会启用绑定的方法,方法属性的值就是绑定方法的返回值
3、绑定的方法中出现的所有变量都会被监听,任何一个变化发生值更新都会重新出发绑定方法,从而更新方法属性值
一般用来解决的问题:一个变量值依赖于多个变量。
六、监听属性
<div id="app">
    <p>姓名:<input type="text" v-model="full_name"></p>
    <p>姓:{{ first_name }}</p>
    <p>名:{{ last_name }}</p>
</div>
<script src="js/vue.js"></script>
<script>
    new Vue({
        el: '#app',
        data: {
            full_name: '',
            first_name: '未知',
            last_name: '未知',
        },
        watch: {
        	 // n是监听的属性当前值,o是其上一次的值,监听的属性值每次更新都会回调监听方法
            full_name(n, o) {
                name_arr = n.split('');
                this.first_name = name_arr[0];
                this.last_name = name_arr[1];
            },
        }
    })
</script>
总结:
1、监听的属性需要在data中声明,监听方法不需要返回值
2、监听的方法名就在监听的属性名,该属性值发生更新时就会回调监听方法
3、监听方法有两个回调参数:一个是当前值一个是上次值
解决的问题:多个变量值依赖于一个变量值
Vue-指令补充、过滤器、计数器属性、监听属性的更多相关文章
- Vue ---- 表单指令 条件指令 循环指令 分隔符 过滤器 计算属性 监听属性
		目录 案例讲解: 一. 表单指令 1.重点: 补充 2.单选框 3.单一复选框 4.多复选框 二 . 条件指令 v-if/v-show ... v-clock 三 . 循环指令 string arra ... 
- vue(4)—— vue的过滤器,监听属性,生命周期函数,获取DOM元素
		过滤器 vue允许自定义过滤器,我个人认为,过滤器有两种,一种是对数据的清洗过滤,一种是对数据切换的动画过滤 数据切换的动画过滤 这里还是利用前面的动态组件的例子: 这里由于没办法展示动画效果,代码如 ... 
- vue条件语句、循环语句、计算属性、侦听器监听属性
		因为 v-if 和v-for是一个指令,所以必须将它添加到一个元素上.但是如果想切换多个元素呢?此时可以把一个 <template> 元素当做不可见的包裹元素,并在上面使用 v-if.最终 ... 
- 9.Vue.js 监听属性
		本章节,我们将为大家介绍 Vue.js 监听属性 watch,我们可以通过 watch 来响应数据的变化. 以下实例通过使用 watch 实现计数器: <div id = "app&q ... 
- Vue.js之计算属性(computed)、属性监听(watch)与方法选项(methods)
		vue.js官网:https://cn.vuejs.org/v2/guide/components-registration.html 一.计算属性-computed 1. 作用:能够避免数据冗余,通 ... 
- vue中的computed(计算属性)和watch(监听属性)的特点,以及深度监听
		//计算属性是根据data中已有的属性,计算得到一个新的属性, <div>全名:{{fullName}}</div> 创建计算属性通过computed关键字,它是一个对象 计算 ... 
- vue.js 监听属性的学习/ 千米、米的转换 /时、分、秒 的转换
		<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ... 
- Vue监听属性的变化
		监听属性的变化watch: { counter: function (nval, oval) { alert('计数器值的变化 :' + oval + ' 变为 ' + nval + '!') }} 
- 009——VUE中watch监听属性变化实现类百度搜索栏功能
		<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ... 
随机推荐
- J-流浪西邮之寻找火石碎片 【经典背包变形】
			题目来源:2019 ACM ICPC Xi'an University of Posts & Telecommunications School Contest 链接:https://www. ... 
- [bzoj1775][Usaco2009 Dec]Vidgame 电视游戏问题_背包dp
			1775: [Usaco2009 Dec]Vidgame 电视游戏问题 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1775 题解: 发 ... 
- 【深入浅出-JVM】(1):Java 虚拟机
			Java 虚拟机地位 种类 BEA的JRockit Solaris的Exact VM IBM的J9 感谢您的耐心阅读,如果您发现文章中有一些没表述清楚的,或者是不对的地方,请给我留言,您的鼓励是作者写 ... 
- PAT B1042 挖掘机哪家强
			AC代码 #include <cstdio> #include <algorithm> using namespace std; const int max_n = 11000 ... 
- 【NOIP2015普及组】 推销员(纪中数据-标准)
			题目 [题目描述] 阿明是一名推销员,他奉命到螺丝街推销他们公司的产品.螺丝街是一条死胡同,出口与入口是同一个,街道的一侧是围墙,另一侧是住户.螺丝街一共有 N 家住户,第 i 家住户到入口的距离为 ... 
- 1-python django的创建
			一.Virtualenv(我的python环境是3.7) 1.虚拟环境创建(针对python版本和django的版本不一致的) 输入 pip install virtuallenv ,看到如下信息就是 ... 
- 经验:什么影响了数据库查询速度、什么影响了MySQL性能 (转)
			一.什么影响了数据库查询速度 1.1 影响数据库查询速度的四个因素 1.2 风险分析 QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定 ... 
- 手动导入jar到本地mvn仓库
			<dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId ... 
- Fiddler之常用操作(过滤器设置,代理设置,手机抓包设置,手机代理配置)
			记录下,工作中常用的一些设置和操作~ 1.过滤“脏”请求 两个下拉框的名词解释: A.内外网过滤 No Zone Filter:不分区域过滤(内网外网都显示) Show only Intranet H ... 
- ES6新特性总结
			一.let const var有缺陷:有块级作用域.能重复定义.无法限制修改.所以出来了let和const. 有块级作用域,不能重复定义 const不能修改,必须定义的时候赋值 二.解构赋值 1.左右 ... 
