1 选项
1.1 is
1、作用:将HTML既定元素替换为自定义的元素
2、示例
常规HTML元素
<ul>
<li></li>
<li></li>
<li></li>
</ul>
使用自定义组件代替常规元素
<ul>
<li is='my-component'></li>
</ul>
1.2 ref
1、作用:为元素或子组件赋予一个ID引用,通过this.$refs.refName来访问元素或子组件的实例
2、示例
<p ref="p">Hello</p>
<children ref="children"></children>
this.$refs.p
this.$refs.children
1.3 v-bind
1、作用:使用v-bind可以将JS中绑定的变量映射到HTML中;
- 可以绑定css样式,实现动态切换class
- 语法糖是“:”
2、定义
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>第七次</title>
<script src="../js/vue.js"></script>
<style>
.active{
color: red;
}
</style>
</head>
<body>
<div id="app">
<!--第一个class没有使用动态绑定,则不能直接删除,两个class会合并处理-->
<h2 class="NotChange" :class="{active: isActive,line: isLine}">{{message}}</h2>
<button @click="changeColor">点击变色</button>
</div>
<script>
const app = new Vue({
el: '#app',
data: {
message: 'hello World!',
isActive: true,
isLine: true
},
methods: {
changeColor: function(){
this.isActive = !this.isActive;
}
}
});
</script>
</body>
</html>
1.4 v-clock
1、作用:用于解决网速慢情况下,HTML元素渲染慢导致的闪烁问题。
2、示例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="https://unpkg.com/vue/dist/vue.js"></script>
</head>
<style>
[v-cloak]{
display: none !important;
}
</style>
</head>
<body>
<div id="app" v-cloak>{{msg}}</div>
<script>
new Vue({
el: '#app',
data: {
msg: '欢迎Vue!'
}
})
</script>
</body>
</html>
1.5 v-el
1、作用:将修饰元素绑定为DOM对象,并用$els调用
2、示例
<!DOCTYPE html>
<html lang="en" xmlns:v-el="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>组件</title>
</head>
<body>
<template id="demo">
<h2>组件对象</h2>
</template>
<div id="app">
<h2 v-el:myh2>DOM对象</h2>
<button @click="getDom">获取DOM对象</button>
<hr>
<demo v-ref:mycom></demo>
<button @click="getCom">获取组件对象</button>
</div>
<script src="../../../js/vue/vue/1.0/vue.js"></script>
<script type="application/javascript">
//创建Vue对象
new Vue({
el:'#app'
,methods:{
getDom(){
console.log(this.$els.myh2);
}
,getCom(){
console.log(this.$refs.mycom);
}
}
,components:{
'demo':{
template:'#demo'
}
}
});
</script>
</body>
</html>
1.6 v-if/v-else
1、作用:通过v-if实现多个元素的展示切换;
2、示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Vue中v-if的常见使用</title>
<script src="https://cdn.bootcss.com/vue/2.5.17-beta.0/vue.js"></script>
</head>
<script>
window.onload = function(){
//创建一个vue实例
var app = new Vue({
el: '#app',
data: {
type:'C',
loginType:'username'
},
methods:{
changeloginType(){
let self = this;
if(self.loginType=='username'){
self.loginType = ''
}else{
self.loginType = 'username'
}
}
}
})
}
</script>
<body>
<div id="app">
<div style="color:red">v-if的简单实用</div>
<template>
<div v-if="type == 'A'">
A
</div>
<div v-else-if="type=='B'">
B
</div>
<div v-else>
C
</div>
</template>
<div style="color:green">v-if的弹框切换</div>
<template v-if="loginType === 'username'">
<label>用户名:</label>
<input placeholder="Enter your username" key="username-input">
</template>
<template v-else>
<label>密码:</label>
<input placeholder="Enter your email address" key="email-input">
</template>
<button @click="changeloginType">切换状态</button>
</div>
</body>
</html>
1.7 v-for
1、作用:在HTML遍历展示变量元素
2、示例
<body>
<div id="app">
<p v-for="(item, i) in list">索引值:{{i}} --- 每一项:{{item}}</p>
</div>
</body>
<script>
var vm = new Vue({
el: '#app',
data:{
list: [1,2,3,4,5]
},
methods: {}
});
</script>
1.8 v-html
1.9 v-slot
1、作用:
1)插槽用于决定将所携带的内容,插入到指定的某个位置,从而使模板分块,具有模块化的特质和更大的重用性。插槽显不显示、怎样显示是由父组件来控制的,而插槽在哪里显示就由子组件来进行控制.
2)简而言之,在子组件中引入<slot>,在父组件引入子组件后,可以在子组件中定义新的内容
2、语法糖:“#”
3、示例:
定义子组件
<template>
<div class= 'button'>
<button></button>
<slot></slot> //slot 可以放在任意位置。(这个位置就是父组件添加内容的显示位置)
</div>
</template>
在父组件中使用子组件
//父组件:(引用子组件 ebutton)
<template>
<div class= 'app'>
<ebutton> 定义的新内容</ebutton>
</div>
</template>
多个slot还可以使用具名插槽,来定义子组件的位置
1.10 v-model
1、作用:双向绑定指定的变量
2、示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test02</title>
<script src="vue2.6.14.js"></script>
</head>
<body>
<div id="app2">
<div>
<input type="text" v-model="message" placeholder="helloVue"/>
</div>
<h1>{{message}}</h1>
</div>
</body>
<script>
var vm = new Vue({
el: '#app2',
data:{
message: "12323213213"
},
methods: {}
});
</script>
</html>
1.11 v-on
1、作用:绑定事件
2、示例:
指定事件发生时调用的函数
<div class="app">
<button v-on:click="myclick">click me</button>
</div>
编写函数
var app = new Vue({
el:'.app',
data:{
},
methods:{
myclick:function(){
console.log(111111);
}
}
});
可以在一个按钮上绑定多个函数
<div class="app">
<button v-on:mouseenter='onenter' v-on:mouseleave='leave'>click me</button>
</div>
1.12 v-once
1、作用:只会被渲染一次,后续不会随着数据的改变而改变,静态内容
2、示例
<div>
<div v-once>{{count}}</div>
<button v-on:click="addCount">加个一吧</button>
</div>
<script>
export default {
name: "Vonce",
data() {
return {
count: 10
}
},
methods: {
addCount: function () {
this.count += 1;
console.log('this.count:'+this.count);
}
}
}
</script>
1.13 v-pre
1.14 v-ref
1.15 v-show
1、作用:v-show 指令通过改变元素的 css 属性(display)来决定元素是显示还是隐藏。
2、示例:
<div id="app">
<p v-show="type==='科技'">大数据之下的锦鲤:为什么你的微博总抽不到奖</p>
</div>
只有在条件成立时,才能显示渲染内容
<script>
var app = new Vue({
el: '#app',
data: {
type:'技术'
}
});
</script>
1.16 v-text
1、作用:将变量内容直接渲染到标签中,不会出现网速有问题带来的闪烁现象
2、示例:
<div id="app">
<!--
注意:在指令中不要写插值语法 直接写对应的变量名称
在 v-text 中 赋值的时候不要在写 插值语法
一般属性中不加 {{}} 直接写 对应 的数据名
-->
<p v-text="msg"></p>
<p>
<!-- Vue 中只有在标签的 内容中 才用插值语法 -->
{{msg}}
</p>
</div>
<script>
new Vue({
el: '#app',
data: {
msg: 'Hello Vue.js'
}
});
2 属性
2.1 el
1、作用:挂载HTML id指定的元素,指定元素名称为"#id"
2.2 data
1、作用:保存变量数据。当一个 Vue 实例被创建时,它将 data 对象中的所有的 property 加入到 Vue 的响应式系统中。当这些 property 的值发生改变时,视图将会产生“响应”,即匹配更新为新的值
2.3 props
1、作用:props是父组件用于向子组件传递数据的通道;
2、示例:
1)静态props
定义一个子组件
var childNode = {
template: `
<div>childNode</div>
`
};
定义一个父组件,并在父组件中注册子组件
var parentNode = {
template: `
<div>
<child></child>
<child></child>
</div>
`,
components: {
child: childNode
}
};
在Vue对象中注册父组件
new Vue({
el: "#example",
components: {
parent: parentNode
}
});
在子组件中定义一个变量,并在props中指定
var childNode = {
template: `
<div>
{{forChildMsg}}
</div>
`,
props: ["for-child-msg"]
};
在父组件中指定props的值
var parentNode = {
template: `
<div>
<p>parentNode</p>
<child for-child-msg="aaa"></child>
<child for-child-msg="bbb"></child>
</div>
`,
components: {
child: childNode
}
};
2)动态props
在模板中,要动态地绑定父组件的数据到子组件模板的 props,和绑定 Html 标签特性一样,使用v-bind绑定;
基于上述静态 props 的代码,这次只需要改动父组件:
var parentNode = {
template: `
<div>
<p>parentNode</p>
<child :for-child-msg="childMsg1"></child>
<child :for-child-msg="childMsg2"></child>
</div>
`,
components: {
child: childNode
},
data: function() {
return {
childMsg1: "Dynamic props msg for child-1",
childMsg2: "Dynamic props msg for child-2"
};
}
};
2.5 methods
1、作用:在methods中可以为Vue对象指定方法
2、示例:
var vm = new Vue({
methods: {
方法名:function(){}
}
})
在方法中访问对象属性,可使用this指定
2.6 events
1、作用:events是子组件向父组件发送消息的通道;
2.7 computed
1、作用:
1)保存会随着变量而改变的中间变量的值,计算属性是基于它们的响应式依赖进行缓存的,只在相关响应式依赖发生改变时它们才会重新求值。
2)简单来讲,它可以降低前端对于中间变量的计算压力,提高响应速度。
3)computed不支持异步。
4)如果一个属性是由其他属性计算而来的,这个属性依赖其他属性,是一个多对一或者一对一,一般用computed
5)如果computed属性属性值是函数,那么默认会走get方法;函数的返回值就是属性的属性值;在computed中的,属性都有一个get和一个set方法,当数据变化时,调用set方法。
2、示例:
2.8 watch
1、作用:
1)不支持缓存,数据变,直接会触发相应的操作;
2)watch支持异步;
3)监听数据的变化,并作出对应的改变
2、示例:
3 生命周期
- 参考:https://blog.csdn.net/weixin_40119412/article/details/108264176
-
生命周期是Vue对象创建到死亡的过程描述,图例如下:
3.1beforeCreate
3.2 created
created:此时,组件的data和methods已经可以用了;但是页面还没有渲染出来;在这个生命周期函数中,我们经常会发起Ajax请求;