vue3不适用2版本的element-ui,要使用https://element-plus.gitee.io/#/zh-CN/component/installation(element-ui-plus)
安装步骤:vue add element-plus
安装完: main.ts内会新增
import installElementPlus from './plugins/element'
const app = createApp(App)
installElementPlus(app)
把./plugins/element的element文件后缀改为ts
import ElementPlus from 'element-plus'
import 'element-plus/lib/theme-chalk/index.css'
import locale from 'element-plus/lib/locale/lang/zh-cn'
export default (app: any) => { // 加入any类型判断
app.use(ElementPlus, { locale })
}
成功引入element-ui-plus
1、setup 函数 setup() 函数是 vue3 中,专门为组件提供的新属性。它为我们使用 vue3 的 Composition API 新特性提供了统一的入口
1.1 执行时机 setup 函数会在 beforeCreate 之后、created 之前执行
示例
欢迎来到红浪漫狗子服务中心
{
{index}}号技师:{
{item}}
你选择了【{
{selectGirl}}】为你服务
// template 渲染
{
{state.selectGirl}}
setup () {
const state = reactive({selectGirl})
console.log(state.selectGirl) // 1
return { state }
}
reactive可以声明变量,直接赋值,不要.value,但是它不是响应式的数据,需要使用toRefs,toRefs() 函数可以将 reactive() 创建出来的响应式对象,转换为普通的对象,只不过,这个对象上的每个属性节点,都是 ref() 类型的响应式数据
{
{ count }}
import { toRefs, reactive } from 'vue'
setup() {
const state = reactive({
count: 0,
naem: 'zs'
})
const increment = () => {
state.count++
}
return {
// 将 state 上的每个属性,都转化为 ref 形式的响应式数据
...toRefs(state),
increment
}
}
这些生命周期钩子注册函数只能在 setup() 期间同步使用, 因为它们依赖于内部的全局状态来定位当前组件实例(正在调用 setup() 的组件实例), 不在当前组件下调用这些函数会抛出一个错误。
写法
setup() {
onMounted(() => {
console.log('mounted!')
})
onUpdated(() => {
console.log('updated!')
})
onUnmounted(() => {
console.log('unmounted!')
})
},
与2对应
Vue2.x 的生命周期 | Vue3.x 的生命周期
beforeCreate | 使用 setup()
created | 使用 setup()
beforeMount | onBeforeMount //组件挂载到节点上之前
mounted | onMounted //组件挂载完成后
beforeUpdate | onBeforeUpdate //组件更新之前
updated | onUpdated // 组件更新完成后
beforeDestroy | onBeforeUnmount //组件卸载之前
destroyed | onUnmounted //组件卸载完成后
errorCaptured | onErrorCaptured //捕获一个来自子孙组件异常
| onActivated //被包含在 中的组件会多出两个生命周期钩子函数,被激活时执行
| onDeactivated // 比如a组件切换到b组件,a组件消失时执行
新增的钩子函数
除了与 Vue2.x 等效的生命周期之外,composition-api 还新增了以下生命周期钩子用作调试:
onRenderTracked onRenderTriggered 两个钩子函数都接收一个 DebuggerEvent :
export default {
onRenderTriggered(e) {
debugger
// 检查哪个依赖性导致组件重新渲染
},
}
原2.x钩子函数也能写,写在setup下面,setup()在beforeCreate之前执行。 只要用一种就行,如果混用,同类型的钩子setup里的比2.x的先执行
loading...
如index.html,或者其他任意地方
setup () {
const confirmVal = ref('粉红浪漫')
const data = reactive({
name: '秋梨膏',
userList: [{name: '老司机', age: 99}]
})
const userInfo = computed(() => {
return data.userList.find(item => item.name === '老司机')
})
//1.watch单个值
watch(confirmVal, (newVal, oldVal) => {
console.log(newVal, oldVal)
})
//2.watch多个值,对象某个属性,取值方法1
watch([confirmVal, () => data.name], (newVal, oldVal) => {
console.log(newVal[0], oldVal[0])
console.log(newVal[1], oldVal[1])
})
//3.watch多个值,对象某个属性,取值方法2
watch([confirmVal, () => data.name], [(newConVal, oldConVal), (newName, oldName)] => {
console.log(newConVal, oldConVal)
console.log(newName, oldName)
})
return {
confirmVal,
...toRefs(data),
}
}
loading...
AsyncShow组件,里是一个promise,如果我们要在等待组件获取数据并解析时显示“正在拼了命的加载…”之类的内容,则只需三个步骤即可实现Suspense。
将异步组件包装在标记中 在我们的Async组件的旁边添加一个兄弟姐妹,标签为。 将两个组件都包装在
==AsyncShow组件==
{
{result}}
import { useRouter } from 'vue-router'
const $router = useRouter()
$router.push('/home')
一个登录功能如下:
登录
因element的form表单需要绑定ref,来实现调用表单方法,所以在
通过import {useStore} from 'vuex'获取vuex对象。 https://www.cnblogs.com/guiyishanren/p/10657910.html vuex教程文档
import {useStore} from 'vuex'
import {onMounted} from 'vue'
setup(props, context) {
const store = useStore()
onMounted(() => {
console.log(store.name)
store.commit('show', '传值')
})
}