vue
7个属性
el属性
用来指示vue编译器从什么地方开始解析 vue的语法,可以说是一个占位符。
data属性
用来组织从view中抽象出来的属性,可以说将视图的数据抽象出来存放在data中。
template属性
用来设置模板,会替换页面元素,包括占位符。
methods属性
放置页面中的业务逻辑,js方法一般都放置在methods中
render属性
创建真正的Virtual Dom
computed属性
用来计算
watch属性
watch:function(new,old){}
监听data中数据的变化
两个参数,一个返回新值,一个返回旧值,
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
</head>
<body>
<div id="app">
{{ message }}
</div>
<script>
var vm = new Vue({
el: '#app',
data: {
message: "hello vue!"
}
})
</script>
</body>
</html> 在线cdn https://cn.vuejs.org/v2/guide/installation.html

vue实现实时同步数据,不需要刷新,后台数据可以模拟,例如这里的data
v-bind 绑定属性
v-bind:title="message" 可以简写 :title="message"
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
</head>
<body>
<div id="app">
<span v-bind:title="message">悬浮试试</span>
</div>
<script>
var vm = new Vue({
el: '#app',
data: {
message: "hello vue!"
}
})
</script>
</body>
</html> a标签url绑定
判断
v-if
v-if-else
v-else
- v-show
动态修改display等等
性能决定选择
小案例 tab页切换
v-if
v-show
循环
v-for="item in items"
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
</head>
<body>
<div id="app">
<li v-for="item in items">{{item.msg}}</li>
</div>
<script>
var vm = new Vue({
el: '#app',
data: {
// [] 数组 {}对象
items: [
{msg: 'vis.yang'},
{msg: 'robot'}
]
}
})
</script>
</body>
</html> 绑定事件
// 方法必须定义在methods对象中 v-on:click="sayHi" 可简写成@click="sayHi"
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
</head>
<body>
<div id="app">
<button v-on:click="sayHi">click me</button>
</div>
<script>
var vm = new Vue({
el: '#app',
data: {
msg: '执行了sayHi'
},
methods: {
// 方法必须定义在methods对象中
//可简写 sayHi(){
alert(this.msg)
}
sayHi: function () {
alert(this.msg);
}
}
});
</script>
</body>
</html> 带参写法
// $event 防止丢失原有的event
事件修饰符
示例,阻止跳转
阻止事件冒泡,叠层事件
双向绑定 v-model 动态操作表单标签的值
<input type="text" v-model="message"/> {{message}} 原始 v-model:value="message" 简写 v-model="message"
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
</head>
<body>
<div id="app">
<input type="radio" name="sex" value="man" v-model="sex">男
<input type="radio" name="sex" value="woman" v-model="sex">女
选择的性别:{{sex}}
</div>
<script>
var vm = new Vue({
el: '#app',
data: {
sex: ''
},
});
</script>
</body>
</html> <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
</head>
<body>
<div id="app">
<select name="" id="" v-model="selected">
<option value="A">A</option>
<option value="B">B</option>
<option value="C">C</option>
</select>
value:{{selected}}
</div>
<script>
var vm = new Vue({
el: '#app',
data: {
selected: ''
},
});
</script>
</body>
</html> 数据代理
代理数据不参与遍历
代理原理
数据代理
getter setter 操作数据 界面主动刷新
{{ _data.name }} 数据代理后简写成{{ name }}
事件修饰符
连用
键盘事件
计算属性
插值语法写姓名案例 若firstName方法多起来就不易于阅读了
methods语法写姓名案例 方***被重复调用,模板重新解析,效率不高
计算属性实现姓名案例
计算属性简写 条件:只读不改可简写
计算属性的天气案例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Vue学习</title>
</head>
<body>
<div id="app">
<h2>hello {{name}}</h2>
<!-- <h1>今天天气很{{isHot?'炎热':'凉爽'}}</h1> -->
<!-- 利用计算属性,减少模板里的判断 -->
<h1>今天天气很{{info}}</h1>
<!-- <button v-on:click="change">切换天气</button> -->
<button @click="change">切换天气</button>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
<script>
new Vue({
el: "#app",
data: {
name: "Vis.Yang",
isHot: 'true',
},
computed: {
info() {
return this.isHot ? '炎热' : '凉爽';
}
},
methods: {
change() {
//取反赋值回
this.isHot = !this.isHot;
}
},
})
</script>
</body>
</html> 效果
监视属性
其他写法
深度监视
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Vue学习</title>
</head>
<body>
<div id="app">
<h2>hello {{name}}</h2>
<!-- <h1>今天天气很{{isHot?'炎热':'凉爽'}}</h1> -->
<!-- 利用计算属性,减少模板里的判断 -->
<h1>今天天气很{{info}}</h1>
<!-- <button v-on:click="change">切换天气</button> -->
<button @click="change">切换天气</button>
<h2>点击了{{number.a}}下</h2>
<button @click="number.a++">点击次数+1</button>
<h2>点击了{{number.b}}下</h2>
<button @click="number.b++">点击次数+1</button>
<h2></h2>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
<script>
//关闭生产提示
Vue.config.productionTip = false;
// 实例化Vue
const vm = new Vue({
el: "#app",
data: {
name: "Vis.Yang",
isHot: 'true',
number: {
a: 1,
b: 1,
}
},
//计算
computed: {
info() {
return this.isHot ? '炎热' : '凉爽';
}
},
// 方法
methods: {
change() {
this.isHot = !this.isHot;
}
},
// 监视
watch: {
//检测isHot
isHot: {
// immediate: true,//初始化时让handler调用一下
handler(newValue, oldValue) {
console.log("isHot被修改了" + "新值:" + newValue + "旧值" + oldValue);
}
},
//监视多级结构中某个属性的变化
// key:value中key其实时字符串类型
// 'number.a': {
// handler() {
// console.log('a的值改变了');
// }
// },
//监视number中的所有的属性 deep: true
'number': {
deep: true,//开启深度监视
handler() {
console.log('有值改变');
}
},
},
})
</script>
</body>
</html> vue组件
自定义标签
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!-- <script src="../js/vue.js"></script>-->
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
</head>
<body>
<div id="app">
<my-component></my-component>
</div>
<script>
Vue.component("my-component",{
template:'<li>vis.yang</li>'
});
var vm = new Vue({
el: '#app',
data: {
name: 'vis.yang',
age: '18',
},
});
</script>
</body>
</html> 命名注意 my-component 可以 myComponent 不可以 mycomponent可以但不规范
<my-component v-for="item in items" v-bind:value="item"></my-component>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!-- <script src="../js/vue.js"></script>-->
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
</head>
<body>
<div id="app">
//v-bind:value="item" 绑定 items 数组中遍历出来的值item,即每一项
<my-component v-for="item in items" v-bind:value="item"></my-component>
</div>
<script>
// 定义component组件
Vue.component("my-component", {
//props 将Vue的数据推送给template
props: ['value'],
template: '<li>{{value}}</li>'
});
var vm = new Vue({
el: '#app',
data: {
items: ["java", "javafx", "vue"]
}
});
</script>
</body>
</html> 
京公网安备 11010502036488号