Vue2学习笔记
1、插值语法:
1.1、功能:
用于解析标签体内容
1.2、写法:
{{ xxx }},xxx是js表达式,且可以直接读取到data中的所有属性。
2、收集表单数据
- 
若:<input type="text"/>,则 v-model 收集的是 value 值,用户输入的就是 value 值。 
- 
若:<input type="radio"/>,则 v-model 收集的是 value 值,且要给标签配置 value 值。 
- 
若:<input type="checkbox"/> - 
1.没有配置 inpu t的 value 属性,那么收集的就是 checked(勾选 or 未勾选,是布尔值) 
- 2.配置 input 的 value 属性:
- (1) v-model 的初始值是非数组,那么收集的就是checked(勾选 or 未勾选,是布尔值)
- (2)v-model 的初始值是数组,那么收集的的就是 value 组成的数组
 
- 
- 
v-model 的三个修饰符: - 
lazy:失去焦点再收集数据 
- 
number:输入字符串转为有效的数字 
- 
trim:输入首尾空格过滤 
 
- 
3、过滤器
3.1、定义:
对要显示的数据进行特定格式化后再显示(适用于一些简单逻辑的处理)
3.2、语法:
- 
注册过滤器:Vue.filter(name,callback)(局部过滤器) 或 new Vue{filters:{}}(全局过滤器) 
- 使用过滤器:{{ xxx | 过滤器名}} 或 v-bind:属性 = "xxx | 过滤器名"
3.3、栗子:时间戳转换为自定义格式
HTML 代码:
<!-- 准备好一个容器--> <!-- 用于定义局部过滤器 --> <div id="root"> <h2>显示格式化后的时间</h2> <!-- 计算属性实现 --> <h3>现在是:{{fmtTime}}</h3> <!-- methods实现 --> <h3>现在是:{{getFmtTime()}}</h3> <!-- 过滤器实现 --> <h3>现在是:{{time | timeFormater}}</h3> <!-- 过滤器实现(传参) --> <!-- 1.过滤器也可以接收额外参数、多个过滤器也可以串联 2.并没有改变原本的数据, 是产生新的对应的数据 --> <h3>现在是:{{time | timeFormater('YYYY_MM_DD') | mySlice}}</h3> <h3 :x="msg | mySlice">大美女</h3> </div> <!-- 用于定义全局过滤器 --> <div id="root2"> <h2>{{msg | mySlice}}</h2> </div>
Vue 代码:
//全局过滤器 Vue.filter('mySlice',function(value){ return value.slice(0,4) }) new Vue({ el:'#root', data:{ time:1621561377603, //时间戳 msg:'你好,尚硅谷' }, // 计算属性 computed: { fmtTime(){ return dayjs(this.time).format('YYYY年MM月DD日 HH:mm:ss') } }, // 方法 methods: { getFmtTime(){ return dayjs(this.time).format('YYYY年MM月DD日 HH:mm:ss') } }, //局部过滤器 filters:{ timeFormater(value,str='YYYY年MM月DD日 HH:mm:ss'){ // console.log('@',value) return dayjs(value).format(str) } } }) new Vue({ el:'#root2', data:{ msg:'hello,atguigu!' } })
4、指令语法
4.1、功能:
用于解析标签(包括:标签属性、标签体内容、绑定事件.....)。
4.2、定义语法:
- 局部指令:
new Vue({ directives:{指令名:配置对象 } }) 或 new Vue({ directives{指令名:回调函数 } })
- 全局指令:
Vue.directive(指令名,配置对象) 或 Vue.directive(指令名,回调函数)
4.3、使用:
v-bind:href="xxx" 或 简写为 :href="xxx",xxx 同样要写 js 表达式,且可以直接读取到 data 中的所有属性。
4.3、栗子备注:
- Vue中有很多的指令,且形式都是:v-自定义名称,此处我们只是拿 v-bind 举个例子
- 指令定义时不加 v- ,但使用时要加 v- ;
- 指令名如果是多个单词,要使用 kebab-case 命名方式,不要用 camelCase 命名。
4.4、栗子:定义一个v-big指令,和v-text功能类似,但会把绑定的数值放大10倍。
HTML 代码:
<!-- 准备好一个容器--> <div id="root"> <h2>{{name}}</h2> <h2>当前的n值是:<span v-text="n"></span> </h2> <!-- <h2>放大10倍后的n值是:<span v-big-number="n"></span> </h2> --> <h2>放大10倍后的n值是:<span v-big="n"></span> </h2> <button @click="n++">点我n+1</button> <hr/> <input type="text" v-fbind:value="n"> </div>
Vue 代码:
new Vue({ el:'#root', data:{ name:'尚硅谷', n:1 }, directives:{ //big函数何时会被调用?1.指令与元素成功绑定时(一上来)。2.指令所在的模板被重新解析时。 // element:DOM元素,binding:传过来的值 big(element,binding){ console.log('big',this) //注意此处的this是window // console.log('big') element.innerText = binding.value * 10 }, fbind:{ //指令与元素成功绑定时(一上来) bind(element,binding){ element.value = binding.value }, //指令所在元素被插入页面时 inserted(element,binding){ element.focus() }, //指令所在的模板被重新解析时 update(element,binding){ element.value = binding.value } } } })

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号