diff --git "a/\346\261\252\347\202\234\345\272\267/20250423\347\254\224\350\256\260.MD" "b/\346\261\252\347\202\234\345\272\267/20250423\347\254\224\350\256\260.MD" new file mode 100644 index 0000000000000000000000000000000000000000..4dbc94323edd5cd1e92f0342a51c68e737175254 --- /dev/null +++ "b/\346\261\252\347\202\234\345\272\267/20250423\347\254\224\350\256\260.MD" @@ -0,0 +1,97 @@ +# **文件 3:Vue.js_Day3_条件循环与组件.md** + +```markdown +# Vue.js 入门 Day 3:条件/循环与组件 + +## 条件渲染 + +```html + +
A类型
+
B类型
+
其他类型
+ + +
始终渲染,切换display
+``` + +## **v-if vs v-show** + +| 指令 | 特点 | 适用场景 | +|------|------|----------| + +| `v-if` | 真正的条件渲染,切换开销大 | 运行时很少改变 | +| `v-show` | 始终渲染,初始渲染开销大 | 频繁切换 | + +## 列表渲染 + +```html + +
  • + {{ item.name }} +
  • + + +
  • + {{ index }} - {{ item.name }} +
  • + + +
  • + {{ key }}: {{ value }} +
  • +``` + +⚠️ **必须绑定 `:key`**,帮助 Vue 高效更新列表 + +## 组件基础 + +### 注册组件 + +```javascript +// 全局注册 +app.component('MyButton', { + props: ['title', 'disabled'], + template: ` + + ` +}) + +// 局部注册 +export default { + components: { MyButton } +} +``` + +### 父子通信 + +```html + + + + +``` + +## 今日要点 + +- ✅ 掌握 v-if / v-else-if / v-else / v-show +- ✅ 熟练使用 v-for 并绑定 :key +- ✅ 理解组件注册方式 +- ✅ 掌握 props 和 $emit 通信 \ No newline at end of file diff --git "a/\346\261\252\347\202\234\345\272\267/20260420\347\254\224\350\256\260.MD" "b/\346\261\252\347\202\234\345\272\267/20260420\347\254\224\350\256\260.MD" new file mode 100644 index 0000000000000000000000000000000000000000..9e60a17a549ef48873ffe690636f2e2f6093bd84 --- /dev/null +++ "b/\346\261\252\347\202\234\345\272\267/20260420\347\254\224\350\256\260.MD" @@ -0,0 +1,70 @@ +# Vue.js 入门 Day 1:基础概念与模板语法 + +## 核心概念 + +### Vue 实例 + +```javascript +// 创建并挂载 Vue 实例 +const app = Vue.createApp({ + data() { + return { + message: 'Hello Vue!' + } + } +}).mount('#app') +``` + +## 常用指令 + +| 指令 | 作用 | 示例 | +|------|------|------| + +| `{{ }}` | 文本插值 | `{{ message }}` | +| `v-bind` | 动态绑定属性 | `v-bind:href="url"` | +| `v-on` | 绑定事件监听 | `v-on:click="handler"` | +| `v-model` | 表单双向绑定 | `v-model="inputValue"` | + +## 简写语法 + +```html + + + + + +``` + +## 示例代码 + +```html +
    +

    {{ title }}

    + +

    你好,{{ name }}!

    + +
    + + +``` + +## 今日要点 + +- ✅ 创建 Vue 实例并挂载 +- ✅ 掌握插值表达式 `{{ }}` +- ✅ 熟悉 `v-bind`、`v-on`、`v-model` +- ✅ 了解指令简写语法 \ No newline at end of file diff --git "a/\346\261\252\347\202\234\345\272\267/20260422\347\254\224\350\256\260.MD" "b/\346\261\252\347\202\234\345\272\267/20260422\347\254\224\350\256\260.MD" new file mode 100644 index 0000000000000000000000000000000000000000..a50ea6d1ab0072bcd9062d081822d8eb9320ea91 --- /dev/null +++ "b/\346\261\252\347\202\234\345\272\267/20260422\347\254\224\350\256\260.MD" @@ -0,0 +1,85 @@ +# Vue.js 入门 Day 2:响应式与计算属性 + +## 响应式数据 + +Vue 会自动追踪数据变化并更新视图: + +```javascript +Vue.createApp({ + data() { + return { + count: 0, + user: { name: 'Vue' } + } + }, + methods: { + increment() { + this.count++ // 自动触发视图更新 + this.user.name = 'Vue3' // 嵌套属性也响应 + } + } +}) +``` + +## 计算属性(computed) + +**有缓存**,依赖不变时不重新计算: + +```javascript +computed: { + // 完整写法 + fullName: { + get() { + return this.firstName + ' ' + this.lastName + }, + set(value) { + const parts = value.split(' ') + this.firstName = parts[0] + this.lastName = parts[1] + } + }, + // 简写(只读) + upperMessage() { + return this.message.toUpperCase() + } +} +``` + +## 方法(methods) + +**无缓存**,每次调用都执行: + +```javascript +methods: { + getFullName() { + return this.firstName + ' ' + this.lastName // 每次调用都重新计算 + } +} +``` + +## 侦听器(watch) + +监听数据变化,执行异步或开销较大的操作: + +```javascript +watch: { + // 简单监听 + count(newVal, oldVal) { + console.log(`count从 ${oldVal} 变为 ${newVal}`) + }, + // 深度监听对象 + user: { + handler(newVal) { + console.log('user变化', newVal) + }, + deep: true, + immediate: true // 立即执行 + } +} +``` + +## 今日要点 + +- ✅ 理解 Vue 响应式原理 +- ✅ 区分 computed 和 methods +- ✅ 掌握 watch 的使用场景 \ No newline at end of file diff --git "a/\346\261\252\347\202\234\345\272\267/20260424\347\254\224\350\256\260.MD" "b/\346\261\252\347\202\234\345\272\267/20260424\347\254\224\350\256\260.MD" new file mode 100644 index 0000000000000000000000000000000000000000..3fc1000621d84b8571170837f8b31d95005d3c0a --- /dev/null +++ "b/\346\261\252\347\202\234\345\272\267/20260424\347\254\224\350\256\260.MD" @@ -0,0 +1,100 @@ +# **文件 4:Vue.js_Day4_生命周期与组合式API.md** + +```markdown +# Vue.js 入门 Day 4:生命周期与组合式 API + +## 生命周期钩子 + +```javascript +export default { + // 创建阶段 + beforeCreate() { console.log('实例初始化前') }, + created() { console.log('实例创建完成,可访问data/methods') }, + + // 挂载阶段 + beforeMount() { console.log('挂载前,DOM未生成') }, + mounted() { console.log('挂载完成,DOM可用') }, + + // 更新阶段 + beforeUpdate() { console.log('数据更新前') }, + updated() { console.log('数据更新后') }, + + // 卸载阶段 + beforeUnmount() { console.log('组件卸载前') }, + unmounted() { console.log('组件已卸载') } +} +``` + +## 生命周期图示 + +```html +beforeCreate → created → beforeMount → mounted + ↓ +beforeUnmount ← unmounted ← beforeUpdate ← updated +``` + +## 组合式 API(Vue 3 推荐) + +### 基础语法 + +```vue + + + +``` + +## 选项式 vs 组合式 + +| 方式 | 特点 | 适用场景 | +|------|------|----------| + +| 选项式 | 结构清晰,易上手,`data`/`methods`/`computed` 分开 | 小型项目,初学者 | +| 组合式 | 逻辑聚焦,复用性强,TypeScript 友好 | 中大型项目,复杂逻辑 | + +## 今日要点 + +- ✅ 理解生命周期执行顺序 +- ✅ 掌握组合式 API(ref / reactive / computed) +- ✅ 了解 `