一、 安装
使用npm
- npm install vue
- npm install -g @vue/cli
- vue upgrade --next
- vue init webpack my-app 使用vite
- npm init vite@latest --template
二、 基础
1. 使用lodash进行防抖节流,lodash提供函数
lodash: www.lodashjs.com/docs/lodash…
2. 计算属性
- 2.1 计算属性和方法的区别 计算属性随着依赖值发生变化而变化,相当于一个缓存的作用。每当重新渲染时,不会触发计算属性但是会触发方法。
- 2.2 基本用法
computed: {
publishedBooksMessage () {
return this.books.length > 0 ? 'YES' : 'NO'
},
fullName: { // 随着fullName改变而改变,具有set和get方法
set(newValue) {
const name = newValue.split(' ')
this.firstName = name[0]
this.lastName = name[name.length - 1]
},
get() {
return this.firstName + ' ' + this.lastName
}
}
},
- 2.3 watch
watch: {
msg (newValue, oldValue) {
console.log(newValue, oldValue)
return '1'
}
}
watch和computed 都可以侦听数据的变化,计算属性只可以修改一个数据,但是wacth可以修改很多数据
- 3 . class与style
<div :class="{isActive: isActive}">class命名使用{}</div>
<div :class="[isActiveClass]">class命名使用[]</div>
<div :class="[isActive ? 'red' : 'green']">class命名使用三元运算符</div>
-
- v-if和v-for
-
v-for和v-if不建议在同一处使用。
-
v-for需要key值
-
- v-model
在组件中使用v-model
父组件:<Sub1 v-model="dataModel"/>
第一种:使用value作为props,input作为事件
子组件:
<input :value="value" @input="$emit('input', $event.target.value)">
第二种:自定义事件、props
子组件:
<input :value="dataModel" @input="$emit('update', $event.target.value)">
model: {
prop: 'dataModel',
event: 'update'
}
第三种:在父组件中设置v-model的值(不推荐)
<Sub1 v-model:title="dataModel"/>
-
- is 可以在一些特定的位置上使用vue组件 表示表格中的一行是VUE组件
-
- props 使用:时,表示动态props 使用对象作为props的值
<table>
<tr is="Sub1"></tr>
</table>
-
- 非pros的attribute
- 8.1 定义:父组件传给子组件的属性,但是没有在props中定义的
例子:test就是非props的attribute
父组件:
<Sub4 test="test" :msg="msg" />
子组件:
<template>
<div>
<p>this.$attrs: {{this.$attrs}}</p>
<p>props: {{msg}}</p>
</div>
</template>
<script>
export default {
name: 'Sub4',
props: ['msg'],
}
</script>
- 8.2 禁用 Attribute 继承
定义: 在使用非props的attribute时,属性是被子组件的根元素继承,但是此时不希望根元素来继承
例子:在父组件中定义input的属性,但是子组件的根元素是div
父组件:
<Sub4 placeholder="非props的attribute" />
错误例子:不使用inheritAttrs ,
这时,placeholder是在div上面
<template>
<div>
<input type="text">
</div>
</template>
正确例子:使用inheritAttrs
此时input就有默认值了
<template>
<div>
<input type="text" v-bind="$attrs" >
</div>
</template>
<script>
export default {
name: 'Sub4',
inheritAttrs: false,
}
</script>
-
- 自定义事件
-
- 插槽 插槽作用域没有理解? 使用props不可以替代吗?
-
- inject/provide 在v2中饭不具有响应性
-
- 动态组件 & 异步组件
-
- 动态组件 使用 保留离开时组件的状态
- 13 ref this.$refs.[name].[attribute] v3来了
-
- 组合式API
- ref、toRef、toRefs