前端工作就是与界面打交道。
vue是mvvm前端视图层框架,提供了数据的双向绑定。以数据驱动视图的改变,视图通过input绑定onchange事件来改变数据。
vue双向数据绑定的原理请查看链接:https://www.cnblogs.com/libin-1/p/6893712.html
一.常见的vue指令
1.插值表达式 v-cloak v-text v-html
【vue|vue 入门】我直接导入的是vue的包,可在vue官网上复制。
案例中我只写了主要部分
>
[v-cloak]{
display: none;
}
// 1.导入包
="lib/vue.js">// 2.dom元素
//
--{{msg}}
//
++++{{msg}}
//
123
//
//
>
let vm = new Vue({ // mvvm 的 vm 层 做中间处理
el:"#app", // elment 绑定的dom元素
data:{// mvvm 的 m 层用来处理数据
msg:"hollow word",
msg2:"1234542"
}
})
- v-cloak 是常用的,里面可以随意添加内容
- v-text 若是在里面添加别的数据会被覆盖掉
- v-html 可渲染html结构的数据,同样也会覆盖原有的内容
// 第一种写法 v-bind:属性
// 第二种写法:属性
>
let vm = new Vue({
el:"#app", // elment 绑定的dom元素
data:{
title:"请点击此处按钮"
}
})
3.事件绑定指令 v-on 可简写 @事件
// 事件后面直接写js表达式会报错,会把console当成一个属性,而非js表达式
// Property or method "console" is not defined 报错
//
// 正确的写法
>
let vm = new Vue({ // mvvm 的 vm 层 做中间处理
el:"#app", // elment 绑定的dom元素
data:{ // 页面渲染的数据
title:"请点击此处按钮"
},
methods:{// 所有方法写在这个里面
show:function(){
console.log("你点击了我的心")
}
}
})
- v-on:事件 = “方法 / 属性” 等号后面不能直接写js表达式,会报错,里面没有这个属性
- .stop 阻止冒泡
- .self 只有当点击自己时,才会触发事件。 只阻止自己身上的事件冒泡
- .prevent 阻止默认事件
- .capture 事件捕获模式触发事件
- .once 事件只触发一次
outer
center
inner
// inner
// center
// out
>
let vm = new Vue({
el: "#app",
data: {
},
methods: {
show() {
console.log("center")
},
out() {
console.log("outer")
},
inner() {
console.log("inner")
}
}
})
5.双向数据绑定 v-model
它运用在表单元素中,实现 v 视图 改变 m数据 跟着改变
v-bind 实现的是 data 改变 v 视图改变
{{msg}}let vm = new Vue({
el: "#app",
data: {
msg:"今天是个好天气呀,好天气呀",
title:"我是一个标题"
}
})
6.v-if v-show
v-if 当切换让它显示时,它才在内存中显示,切换频繁的话,消耗性能
v-show 只是给元素添加了一个样式 display:none; 频繁切换,消耗性能小
二.vue中样式的写法 通过v-bind绑定属性,操作样式。分为2种,一种直接绑定class,可嵌套外联样式; 一种直接绑定style ,写行内样式。 全文都是采用简写指令。v-bind 简写为 ‘ :’
第一种,以数组的模式传递样式
第二种,在数组中写三元表达式
第三种,在数组中以对象方式传递样式
第四种,直接以对象模式传递样式内联样式写法
>
let vm = new Vue({
el: "#app",
data: {
flag: true,
obj1: { 'color': 'red', 'font-size': '22px' }
}
})
三.在vue中使用v-for 遍历数组
- {{key+1}}---{{item.name}}
- {{cont}}
>
let vm = new Vue({
el: "#app",
data: {
list: [
{ 'id': 1, 'name': 'wangfeng' },
{ 'id': 2, 'name': 'zhaowan' }
]
}
})
四.vue中的事件处理 事件监听 v-on
v-on:事件 = 事件处理函数
- 全局自定义事件
自动获取焦点事件 v-focus
// 调用自定义事件Vue.directive('focus',{// 使用时直接在dom元素中插入v-focus
inserted:function(e){
e.focus();
}
})
- 局部自定义事件
在定义自定义 事件名称时,不需要加 v- 只在使用时加 v-
let vm = new Vue({
el: "#app",
data: {
},
directives: { // 自定义事件
// el,当前被绑定的dom元素binding是传入的参数
'color': function (el, binding) {
el.style.color = binding.value;
},
'focus':funcion(el){
el.focus();
}
}
})
按键修饰符
记住所有的 keyCode 比较困难,所以 Vue 为最常用的按键提供了别名:
- enter
- tab
- delete (捕获“删除”和“退格”键)
- esc
- space
- up
- down
- left
- right
-自定义按键修饰符
可以通过全局 config.keyCodes 对象自定义按键修饰符别名:
// 可以使用五.vue 中的过滤器filter 1. 全局过滤器 Vue.filter@keyup.f2=‘submit’
Vue.config.keyCodes.f2= 113
全局过滤器,其它实例皆可调用
{{msg | dataform}}
{{msg | dataform}}
>
let vm = new Vue({
el:"#app",
data:{
msg:"这是请求来的数据"
}
});
let vm2 = new Vue({
el:"#app2",
data:{
msg:"这是请求来的数据"
}
});
Vue.filter('dataform', function (data) { // data传过来的数据,msg
console.log(data+2);
// 结果:这是请求来的数据2
})
2.私有过滤器
实例身上自己的过滤器,其它的实例不能调用
当有全局过滤器,也有私有过滤器时,实例先找自己身上的过滤器,没有,再找全局过滤器
{{msg | dataform}}
>
let vm = new Vue({
el:"#app",
data:{
msg:"这是请求来的数据"
},
filters:{// 私有过滤器
dataform:fuction(data){
console.log(data+1);
// 结果:这是请求来的数据1
}
});
// 全局过滤器
Vue.filter('dataform', function (data) { // data传过来的数据,msg
console.log(data+2);
// 结果:这是请求来的数据2
})
六. vue中动画运用 单个动画用transtion包裹要做动画的元素
动画类名默认情况下是v-开头
若想自定义动画则只需要在transition标签上添加name属性即可
>
.v-enter-active,.v-leave-active{
transition: opacity 1s;
}
.v-enter,.v-leave-to{ // 入场动画,出场动画
opacity: 0;
}.fade-enter-active,.fade-leave-active{// 自定义类名动画
transition: opacity 1s;
}
.fade-enter,.fade-leave-to{
opacity: 0;
}
这是单个动画
这是单个动画
>
let vm = new Vue({
el: "#app",
data: {
flag: false,
flag2: false
}
})
多个动画用transition-group包裹,用法同上
tag属性默认值是span,给tag添加什么标签,dom就以这个标签渲染
appear是页面一打开,就有的动画特效
其它属性请参考vue中文文档:https://vuejs.bootcss.com/v2/guide/transitions.html
{{item.id}}---{{item.name}}
>
let vm = new Vue({
el: "#app",
data: {
list: [
{ id: 1, name: "wangfai", age: 18 },
{ id: 2, name: "wangdeng", age: 28 },
{ id: 3, name: "wangjin", age: 48 }
]
}
})
推荐阅读
- JavaScript|vue 基于axios封装request接口请求——request.js文件
- 前端|web前端dya07--ES6高级语法的转化&render&vue与webpack&export
- 前端开发|Vue2.x API 学习
- vue|Vue面试常用详细总结
- vue|电商后台管理系统(vue+python|node.js)
- 腾讯TEG实习|腾讯实习——Vue解决跨域请求
- Vue|vue-router 详解
- vue|vue3替代vuex的框架piniajs实例教程
- Vue|Vue3.0的插槽是如何实现的()
- 前端|面试官(谈谈Vue和React的区别())