diff --git "a/4\347\247\215\346\226\271\346\263\225\343\200\201\346\226\207\346\234\254\346\217\222\345\200\274\343\200\201\345\216\237\345\247\213HTML\343\200\201\345\261\236\346\200\247\347\273\221\345\256\2321.md" "b/4\347\247\215\346\226\271\346\263\225\343\200\201\346\226\207\346\234\254\346\217\222\345\200\274\343\200\201\345\216\237\345\247\213HTML\343\200\201\345\261\236\346\200\247\347\273\221\345\256\2321.md" new file mode 100644 index 0000000000000000000000000000000000000000..edcb0bc42c2239baa8a3dd3c21976f74da90fc69 --- /dev/null +++ "b/4\347\247\215\346\226\271\346\263\225\343\200\201\346\226\207\346\234\254\346\217\222\345\200\274\343\200\201\345\216\237\345\247\213HTML\343\200\201\345\261\236\346\200\247\347\273\221\345\256\2321.md" @@ -0,0 +1,99 @@ +# 创建Vue3项目的几种方法 +1. 利用HBuilder X 项目模板 +文件-新建-项目-选择vue3项目 + +vue --version // 查看@vue/cli版本,确保@vue/cli版本在4.5.0以上vue --version + +2. 使用 vue-cli 创建 +## 查看@vue/cli版本,确保@vue/cli版本在4.5.0以上 +vue --version +## 安装或者升级你的@vue/cli +npm install -g @vue/cli +## 创建 +vue create vue_test +## 启动 +cd vue_test +npm run serve +复制代码 + +3. 使用 vite 创建 +什么是vite?—— 新一代前端构建工具。 +优势如下: 开发环境中,无需打包操作,可快速的冷启动。 - 轻量快速的热重载(HMR)。 - 真正的按需编译,不再等待整个应用编译完成。 +官方文档:https://v3.cn.vuejs.org/guide/installation.html#vite vite、 + +官网:https://vitejs.cn + +## 创建工程 +npm init vite-app +## 进入工程目录 +cd +## 安装依赖 +npm install +## 运行 +npm run dev +复制代码 + +4. 基于可视化面板创建vue3项目 +vue ui + + +# 模板语法 +## 文本插值 +App.vue +```vue + +``` +HelloWorld.vue +```vue +defineProps({ + msg: String, + bdxz:String +}) + + + +``` +双大括号标签会被替换为相应组件实例中 msg 属性的值。同时每次 msg 属性更改时它也会同步更新。 + +## 原始html +双大括号会将数据解释为纯文本,而不是 HTML。若想插入 HTML,你需要使用 v-html 指令 +``` +bdxz="不当小猪" + +
+``` + +* 安全警告 +在网站上动态渲染任意 HTML 是非常危险的,因为这非常容易造成 XSS 漏洞。请仅在内容安全可信时再使用 v-html,并且永远不要使用用户提供的 HTML 内容。 + + +# Attribute 绑定 +双大括号不能在 HTML attributes 中使用。想要响应式地绑定一个 attribute,应该使用 v-bind 指令: + +``` +
+``` +``` +defineProps({ + msg: String, + bdxz:String, + id:Number +}) + + + + +``` +v-bind 指令指示 Vue 将元素的 id attribute 与组件的 dynamicId 属性保持一致。如果绑定的值是 null 或者 undefined,那么该 attribute 将会从渲染的元素上移除。 diff --git "a/Vue\345\237\272\347\241\200_\344\272\213\344\273\266\345\244\204\347\220\206.md" "b/Vue\345\237\272\347\241\200_\344\272\213\344\273\266\345\244\204\347\220\206.md" new file mode 100644 index 0000000000000000000000000000000000000000..8aeab40b0ead1cec075a66c441c2abb5dc4454ba --- /dev/null +++ "b/Vue\345\237\272\347\241\200_\344\272\213\344\273\266\345\244\204\347\220\206.md" @@ -0,0 +1,201 @@ +# 4.10笔记 +## 监听事件 +使用 v-on 指令 (简写为 @) 来监听 DOM 事件,并在事件触发时执行对应的 JavaScript。用法:v-on:click="handler" 或 @click="handler" + +## 事件处理器`(handler)`的值有两种: +### 内联事件处理器 +- 内联事件处理器:事件被触发时执行的内联 JavaScript 语句 (与 onclick 类似) +```JS + + + +``` +### 方法事件处理器 +- 方法事件处理器:一个指向组件上定义的方法的属性名或是路径 + +随着事件处理器的逻辑变得愈发复杂,内联代码方式变得不够灵活。因此 v-on 也可以接受一个方法名或对某个方法的调用 +```JS + + + +``` +方法事件处理器会自动接收原生 DOM 事件并触发执行。在上面的例子中,我们能够通过被触发事件的 event.target.tagName 访问到该 DOM 元素 +### 方法说内联事件判断 +模板编译器会通过检查 v-on 的值是否是合法的 JavaScript 标识符或属性访问路径来断定是何种形式的事件处理器。举例来说,foo、foo.bar 和 foo['bar'] 会被视为方法事件处理器,而 foo() 和 count++ 会被视为内联事件处理器 +## 在内联处理器中调用方法 +除了直接绑定方法名,还可以在内联事件处理器中调用方法。这允许我们向方法传入自定义参数以代替原生事件 +```JS + + + +``` +## 在内联事件处理器中访问事件参数 +有时我们需要在内联事件处理器中访问原生 DOM 事件。你可以向该处理器方法传入一个特殊的 $event 变量,或者使用内联箭头函数: +```JS + + + +``` +## 事件修饰符 +在处理事件时调用 event.preventDefault() 或 event.stopPropagation() 是很常见的。尽管我们可以直接在方法内调用,但如果方法能更专注于数据逻辑而不用去处理 DOM 事件的细节会更好 + +为解决这一问题,Vue 为 v-on 提供了事件修饰符。修饰符是用 . 表示的指令后缀,包含以下这些: +- .stop +- .prevent +- .self +- .capture +- .once +- .passive +```JS + + + + +
+ + + + + +
+ + + +
...
+ +``` +使用修饰符时需要注意调用顺序,因为相关代码是以相同的顺序生成的。因此使用 @click.prevent.self 会阻止元素及其子元素的所有点击事件的默认行为,而 @click.self.prevent 则只会阻止对元素本身的点击事件的默认行为 + +.capture、.once 和 .passive 修饰符与原生 addEventListener 事件相对应: +```JS + + +
...
+ + + + + + +
...
+``` +.passive 修饰符一般用于触摸事件的监听器,可以用来改善移动端设备的滚屏性能 + +不要同时使用 .passive 和 .prevent,.passive 已经向浏览器表明了你不想阻止事件的默认行为。如果你这么做了,则 .prevent 会被忽略,并且浏览器会抛出警告 +## 按键修饰符 +在监听键盘事件时,我们经常需要检查特定的按键。Vue 允许在 v-on 或 @ 监听按键事件时添加按键修饰符 +```JS + + +``` +直接使用 KeyboardEvent.key 暴露的按键名称作为修饰符,但需要转为 kebab-case 形式 +```JS + +``` +在上面的例子中,仅会在 $event.key 为 'PageDown' 时调用事件处理 +### 按键别名 +Vue 为一些常用的按键提供了别名: +- .enter +- .tab +- .delete (捕获“Delete”和“Backspace”两个按键) +- .esc +- .space +- .up +- .down +- .left +- .right +### 系统按键修饰符 +你可以使用以下系统按键修饰符来触发鼠标或键盘事件监听器,只有当按键被按下时才会触发 +- .ctrl +- .alt +- .shift +- .meta +```JS + + + + +
随便做点什么
+``` +### .exact 修饰符 +.exact 修饰符允许控制触发一个事件所需的确定组合的系统按键修饰符 +```JS + + + + + + + + +``` +## 鼠标按键修饰符 +- .left +- .right +- .middle \ No newline at end of file diff --git "a/Vue\345\237\272\347\241\200_\346\250\241\346\235\277\345\274\225\347\224\250\343\200\201\347\273\204\344\273\266\345\237\272\347\241\200(\351\203\250\345\210\206).md" "b/Vue\345\237\272\347\241\200_\346\250\241\346\235\277\345\274\225\347\224\250\343\200\201\347\273\204\344\273\266\345\237\272\347\241\200(\351\203\250\345\210\206).md" new file mode 100644 index 0000000000000000000000000000000000000000..c64f116816528f5d52d9793ed8292a2305a08c76 --- /dev/null +++ "b/Vue\345\237\272\347\241\200_\346\250\241\346\235\277\345\274\225\347\224\250\343\200\201\347\273\204\344\273\266\345\237\272\347\241\200(\351\203\250\345\210\206).md" @@ -0,0 +1,141 @@ +# 4.14笔记 +# 模板引用 +直接访问底层 DOM 元素,使用特殊的`ref`attribute: +```JS + +``` +ref与v-for中的key类似。它允许我们在一个特定的DOM元素或子组件实例被挂载后,获得对它的直接引用。 +## 访问模板引用 +挂载结束后引用都会被暴露在`this.$refs`之上: +```JS + + + +``` +只可以在挂载后才能访问引用模板 +## v-for中的模板引用 +当在v-for中使用模板引用时,相应的引用中包含的值是一个数组 +```JS + + + +``` +ref数组并不保证与源数组相同的顺序 +## 函数模板引用 +ref attribute还可以绑定为一个函数,在每次组件更新时都被调用。该函数会收到元素引用作为其第一个参数: +```JS +{ /* 将 el 赋值给一个数据属性或 ref 变量 */}> +``` +要使用动态的`:ref`绑定才能传入一个函数。当绑定的函数被卸载时,函数也会被调用一次,此时的el参数回事null +## 组件上的ref + +# 组件基础 +## 定义一个组件 +当使用构建步骤时,我们一般会将 Vue 组件定义在一个单独的 .vue 文件中,这被叫做单文件组件 (简称 SFC): +```JS + + + +``` +## 使用组件 +要使用一个子组件,需要在父组件中导入它 +```JS +//ButtonCount.vue文件 + + + + +//App.vue文件 + + + +``` +组件可以被重用任意多次 +## 传递props +Props是一个特殊的attributes,可以在组件上声明注册 +```JS +// BolgPost.vue + + + + +//App.vue文件 + + + +``` diff --git "a/Vue\345\237\272\347\241\200_\347\224\237\345\221\275\345\221\250\346\234\237\343\200\201\344\276\246\345\220\254\345\231\250.md" "b/Vue\345\237\272\347\241\200_\347\224\237\345\221\275\345\221\250\346\234\237\343\200\201\344\276\246\345\220\254\345\231\250.md" new file mode 100644 index 0000000000000000000000000000000000000000..68eccd9cdf92d0f8cb09d7d0ec3cb91ba6dd86d2 --- /dev/null +++ "b/Vue\345\237\272\347\241\200_\347\224\237\345\221\275\345\221\250\346\234\237\343\200\201\344\276\246\345\220\254\345\231\250.md" @@ -0,0 +1,129 @@ +# 4.13笔记 +# 生命周期 +## 生命周期钩子 +每个 Vue 组件实例在创建时都需要经历一系列的初始化步骤,比如设置好数据侦听,编译模板,挂载实例到 DOM,以及在数据改变时更新 DOM。在此过程中,它也会运行被称为生命周期钩子的函数,让开发者有机会在特定阶段运行自己的代码 +## 注册周期钩子 +mounted 钩子可以用来在组件完成初始渲染并创建 DOM 节点后运行代码: +```JS +export default { + mounted() { + console.log(`the component is now mounted.`) + } +} +``` +还有其他一些钩子,会在实例生命周期的不同阶段被调用,最常用的是 mounted、updated 和 unmounted + +所有生命周期钩子函数的 this 上下文都会自动指向当前调用它的组件实例。注意:避免用箭头函数来定义生命周期钩子,因为如果这样的话你将无法在函数中通过 this 获取组件实例 +## 生命周期图示 +[图裂了!](./imgs/%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F%E5%9B%BE%E7%A4%BA2.png) +# 侦听器 +## 基本事例 +```JS + + +``` +## 深层侦听器 +watch 默认是浅层的:被侦听的属性,仅在被赋新值时,才会触发回调函数——而嵌套属性的变化不会触发。如果想侦听所有嵌套的变更,需要深层侦听器: +```JS +export default { + watch: { + someObject: { + handler(newValue, oldValue) { + // 注意:在嵌套的变更中, + // 只要没有替换对象本身, + // 那么这里的 `newValue` 和 `oldValue` 相同 + }, + deep: true + } + } +} +``` +深度侦听需要遍历被侦听对象中的所有嵌套的属性,当用于大型数据结构时,开销很大。因此请只在必要时才使用它,并且要留意性能 +## 即时回调的侦听器 +watch 默认是懒执行的:仅当数据源变化时,才会执行回调。但在某些场景中,我们希望在创建侦听器时,立即执行一遍回调。举例来说,我们想请求一些初始数据,然后在相关状态更改时重新请求数据 + +我们可以用一个对象来声明侦听器,这个对象有 handler 方法和 immediate: true 选项,这样便能强制回调函数立即执行: + +```JS +export default { + // ... + watch: { + question: { + handler(newQuestion) { + // 在组件实例创建时会立即调用 + }, + // 强制立即执行回调 + immediate: true + } + } + // ... +} +``` +回调函数的初次执行就发生在 created 钩子之前。Vue 此时已经处理了 data、computed 和 methods 选项,所以这些属性在第一次调用时就是可用的 +## 回调的触发时机 +当你更改了响应式状态,它可能会同时触发 Vue 组件更新和侦听器回调 + +默认情况下,用户创建的侦听器回调,都会在 Vue 组件更新`之前`被调用。这意味着你在侦听器回调中访问的 DOM 将是被 Vue 更新之前的状态 + +如果想在侦听器回调中能访问被 Vue 更新`之后`的 DOM,你需要指明 flush: 'post' 选项: + +```JS +export default { + // ... + watch: { + key: { + handler() {}, + flush: 'post' + } + } +} +``` +## this.$watch() +使用组件实例的 $watch() 方法来命令式地创建一个侦听器: +```JS +export default { + created() { + this.$watch('question', (newQuestion) => { + // ... + }) + } +} +``` +如果要在特定条件下设置一个侦听器,或者只侦听响应用户交互的内容,这方法很有用。它还允许你提前停止该侦听器 +## 停止侦听器 +用 watch 选项或者 $watch() 实例方法声明的侦听器,会在宿主组件卸载时自动停止 + +在少数情况下,你的确需要在组件卸载之前就停止一个侦听器,这时可以调用 $watch() API 返回的函数: +```JS +const unwatch = this.$watch('foo', callback) + +// ...当该侦听器不再需要时 +unwatch() +``` \ No newline at end of file diff --git "a/Vue\345\237\272\347\241\200_\350\241\250\345\215\225\350\276\223\345\205\245\347\273\221\345\256\232.md" "b/Vue\345\237\272\347\241\200_\350\241\250\345\215\225\350\276\223\345\205\245\347\273\221\345\256\232.md" new file mode 100644 index 0000000000000000000000000000000000000000..6a76abe53380290de1387f62129570ef88a00c31 --- /dev/null +++ "b/Vue\345\237\272\347\241\200_\350\241\250\345\215\225\350\276\223\345\205\245\347\273\221\345\256\232.md" @@ -0,0 +1,195 @@ +# 4.12笔记 +## v-model指令 + +## 基本用法 +### 文本 +```JS +

请输入:{{ message }}

+ +``` +### 多行文本 +```JS +

请输入:

+

{{ message }}

+ +``` +在`