1 | <!-- 使用全局构建版本 --> |
1 | <div id="app">{{ message }}</div> |
1 | import { createApp } from 'vue' |
1 | <div v-bind:id='myId'></div> |
1 | const count = reactive({}) |
返回值为一个计算属性 ref。和其他一般的 ref 类似,通过.value访问,在模板会自动解包
1 | import { computed } from 'vue' |
1 | const x = ref(0) |
1 | const obj = reactive({ count: 0 }) |
1 | const obj = reactive({ count: 0 }) |
1 | // 在使用异步回调时 |
1 | watch(source, callback, { |
1 | import { watchEffect } from 'vue' |
1 | <template> |
1 | <script setup> |
1 | <script setup> |
1 | <script setup> |
1 | // <script setup> 模式下 |
1 | defineProps({ |
1 | <!-- child.vue --> |
1 | // child.vue |
1 | <!-- 子组件 --> |
1 | // 子组件 |
1 | <!-- 父组件 --> |
1 | // 父组件 |
注意:不管校验是否通过,都不阻碍代码执行,也就是说校验没用,只能在不通过是打印个日志而已。
1 | <input v-model="searchText" /> |
v-model 默认props是modelValue,默认emit是update:modelValue
所以,CustomInput组件内部应该是这样
1 | <!-- CustomInput.vue --> |
也可以是getter、setter计算属性
1 | <!-- CustomInput.vue --> |
如果想要自定义v-model的props名称,可以用v-model:title这种形式,title就是自定义的名称
这样,便可实现多v-model同时使用的效果
1 | <CustomInput v-model:title="titleText" v-model:msg="msgText" /> |
自定义v-model的修饰符:v-model.capitalize capitalize属于自定义的修饰符(自带的有.lazy;.trim;.number等)
组件的 v-model 上所添加的修饰符,可以通过 modelModifiers prop 在组件内访问到
1 | <script setup> |
自定义model和修饰符共用时的写法:👇
1 | <MyComponent v-model:title.capitalize="myText"> |
1 | const props = defineProps(['title', 'titleModifiers']) |
“透传 attribute”指的是传递给一个组件,却没有被该组件声明为 props 或 emits 的 attribute 或者 v-on 事件监听器。最常见的例子就是 class、style 和 id。
1 | <!-- <MyButton> 的模板 --> |
1 | <script> |
1 | <div class="btn-wrapper"> |
1 | // <script setup> |
1 | <!-- BaseLayout.vue --> |
1 | <base-layout> |
1 | <!-- <MyComponent> 的模板 --> |
插槽作用域相互封闭,一个插槽访问不到另一个插槽作用域
一个父组件相对于其所有的后代组件,会作为 依赖提供者。任何后代的组件树,无论层级有多深,都可以 注入 由父组件提供给整条链路的依赖。
1 | // <script setup> |
1 | // <script setup> |
1 | // <!-- 在供给方组件内 --> |
1 | // keys.js |
可以使用带 . 的组件标签,例如 <Foo.Bar> 来引用嵌套在对象属性中的组件。这在需要从单个文件中导入多个组件的时候非常有用:
1 | // /form-components/index.js |
在 <script setup> 中,任何以 v 开头的驼峰式命名的变量都可以被用作一个自定义指令: vFocus 即可以在模板中以 v-focus
1 | <template> |
1 | // <script setup> |
1 | .a :deep(.b) { |
1 | :global(.red) { |
最好单独新建<style module>标签
1 | <template> |
1 | import { useCssModule } from 'vue' |
1 | <script setup> |
通过import.meta.env对象获取环境变了
.env文件
只有以 VITE_ 为前缀的变量才会暴露,例如:VITE_SOME_KEY=123