diff --git "a/18\345\210\230\344\272\216\350\217\262/20230403\347\224\237\345\221\275\345\221\250\346\234\237\350\260\203\347\224\250\346\226\271\346\263\225.md" "b/18\345\210\230\344\272\216\350\217\262/20230403\347\224\237\345\221\275\345\221\250\346\234\237\350\260\203\347\224\250\346\226\271\346\263\225.md" new file mode 100644 index 0000000000000000000000000000000000000000..425b0193ba943f23403d69cf83f298a83766ec09 --- /dev/null +++ "b/18\345\210\230\344\272\216\350\217\262/20230403\347\224\237\345\221\275\345\221\250\346\234\237\350\260\203\347\224\250\346\226\271\346\263\225.md" @@ -0,0 +1,31 @@ + + + + + diff --git "a/18\345\210\230\344\272\216\350\217\262/20230403\351\200\211\346\213\251\345\223\215\345\272\224.md" "b/18\345\210\230\344\272\216\350\217\262/20230403\351\200\211\346\213\251\345\223\215\345\272\224.md" new file mode 100644 index 0000000000000000000000000000000000000000..230e3e30130f17445041b29983b5ca88459c0485 --- /dev/null +++ "b/18\345\210\230\344\272\216\350\217\262/20230403\351\200\211\346\213\251\345\223\215\345\272\224.md" @@ -0,0 +1,25 @@ + + + + + \ No newline at end of file diff --git "a/18\345\210\230\344\272\216\350\217\262/20230404\350\256\241\347\256\227\346\234\272\345\261\236\346\200\247.md" "b/18\345\210\230\344\272\216\350\217\262/20230404\350\256\241\347\256\227\346\234\272\345\261\236\346\200\247.md" new file mode 100644 index 0000000000000000000000000000000000000000..5d8eeb5810d5c69c0f0a99456a341c978ca7016d --- /dev/null +++ "b/18\345\210\230\344\272\216\350\217\262/20230404\350\256\241\347\256\227\346\234\272\345\261\236\346\200\247.md" @@ -0,0 +1,32 @@ + + + + + diff --git "a/18\345\210\230\344\272\216\350\217\262/20230406\346\235\241\344\273\266\346\270\262\346\237\223.md" "b/18\345\210\230\344\272\216\350\217\262/20230406\346\235\241\344\273\266\346\270\262\346\237\223.md" new file mode 100644 index 0000000000000000000000000000000000000000..4e72a25e4bf89f952f16fbfc5aba24f90a95023c --- /dev/null +++ "b/18\345\210\230\344\272\216\350\217\262/20230406\346\235\241\344\273\266\346\270\262\346\237\223.md" @@ -0,0 +1,36 @@ + + + + +------列表渲染 + + + + + \ No newline at end of file diff --git "a/18\345\210\230\344\272\216\350\217\262/20230407\344\272\213\344\273\266\345\244\204\347\220\206.md" "b/18\345\210\230\344\272\216\350\217\262/20230407\344\272\213\344\273\266\345\244\204\347\220\206.md" new file mode 100644 index 0000000000000000000000000000000000000000..e22354e0ec485bfbd2f356895e9956cc18c86da7 --- /dev/null +++ "b/18\345\210\230\344\272\216\350\217\262/20230407\344\272\213\344\273\266\345\244\204\347\220\206.md" @@ -0,0 +1,23 @@ + + + \ No newline at end of file diff --git "a/18\345\210\230\344\272\216\350\217\262/20230410\350\241\250\345\215\225\350\276\223\345\205\245.md" "b/18\345\210\230\344\272\216\350\217\262/20230410\350\241\250\345\215\225\350\276\223\345\205\245.md" new file mode 100644 index 0000000000000000000000000000000000000000..29e89c21e9b619678f425c9e3f243b6a5db63864 --- /dev/null +++ "b/18\345\210\230\344\272\216\350\217\262/20230410\350\241\250\345\215\225\350\276\223\345\205\245.md" @@ -0,0 +1,85 @@ + + + + + diff --git "a/18\345\210\230\344\272\216\350\217\262/20230411\344\276\246\345\220\254\345\231\250.md" "b/18\345\210\230\344\272\216\350\217\262/20230411\344\276\246\345\220\254\345\231\250.md" new file mode 100644 index 0000000000000000000000000000000000000000..5ead0171b8f8e70005e209a46f4c9bba1d07520f --- /dev/null +++ "b/18\345\210\230\344\272\216\350\217\262/20230411\344\276\246\345\220\254\345\231\250.md" @@ -0,0 +1,50 @@ + + + + diff --git "a/18\345\210\230\344\272\216\350\217\262/20230411\347\224\237\345\221\275\345\221\250\346\234\237.md" "b/18\345\210\230\344\272\216\350\217\262/20230411\347\224\237\345\221\275\345\221\250\346\234\237.md" new file mode 100644 index 0000000000000000000000000000000000000000..2505144edc3df8ed99a4d377051a4ec836c6a13d --- /dev/null +++ "b/18\345\210\230\344\272\216\350\217\262/20230411\347\224\237\345\221\275\345\221\250\346\234\237.md" @@ -0,0 +1,26 @@ + + + + diff --git "a/18\345\210\230\344\272\216\350\217\262/20230411\350\241\250\345\215\225\347\273\221\345\256\232.md" "b/18\345\210\230\344\272\216\350\217\262/20230411\350\241\250\345\215\225\347\273\221\345\256\232.md" new file mode 100644 index 0000000000000000000000000000000000000000..2deb2fd7b45b914b3651789e9312c5ca920d2d26 --- /dev/null +++ "b/18\345\210\230\344\272\216\350\217\262/20230411\350\241\250\345\215\225\347\273\221\345\256\232.md" @@ -0,0 +1,23 @@ + + + diff --git "a/18\345\210\230\344\272\216\350\217\262/20230413\346\250\241\346\235\277\345\274\225\347\224\250.md.md" "b/18\345\210\230\344\272\216\350\217\262/20230413\346\250\241\346\235\277\345\274\225\347\224\250.md.md" new file mode 100644 index 0000000000000000000000000000000000000000..5d6bf2ab92606a80f54824b249e020fa58b8712e --- /dev/null +++ "b/18\345\210\230\344\272\216\350\217\262/20230413\346\250\241\346\235\277\345\274\225\347\224\250.md.md" @@ -0,0 +1,234 @@ +一、模板引用 +虽然Vue的声明性渲染模型为你抽象了大部分对DOM的直接操作,但在某些情况下,我们仍然需要直接访问底层DOM元素。 + +声明性渲染, +关于声明性,前期遇到时已经做过简单介绍。而这边官方文档的语句再次暴露了声明性渲染的一些特点,即抽象了大部分对DOM的直接操作,简单讲就是我们只要指定模板挂载到哪里,而不需要直接在操作模板中各个元素的细节(因为这部分在底层或者说后台已经做好了)。 + +要实现这一点,我们可以使用特殊的 ref attribute: + + +1 +ref 是一个特殊的attribute,和 v-for 章节中提到的 key 类似。它允许我们在一个特定的DOM元素或子组件实例被挂载后,获得对它的直接引用。这可能很有用,比如说在组件挂载时将焦点设置到一个input元素上,或在一个元素上初始化一个第三方库。 + +1.1. 访问模板引用 +挂载结束后引用都会暴露在 this.$refs 之上: + + + + + +注意,你只可以在组件挂载后才能访问模板引用。如果你想在模板中的表达式上访问 $refs.input ,在初次渲染时会是 null 。这是因为在初次渲染前这个元素还不存在! + +1.2. v-for 中的模板引用 +当在 v-for 中使用模板引用时,相应的引用中包含的值是一个数组: + + + + + + +应该注意的是,ref 数组并不保证与源数组相同的顺序。 + +1.3. 函数模板引用 +除了使用字符串值作名字,ref attribute 还可以绑定为一个函数,会在每次组件更新时都被调用。该函数会收到元素引用作为其第一个参数: + + +1 +注意我们这里需要使用动态的 :ref 绑定才能够传入一个函数。当绑定的元素被卸载时,函数也会被调用一次,此时的 el 参数会是 null 。你当然也可以绑定一个组件方法而不是内联函数。 + +1.4. 组件上的 ref +模板引用也可以被用在一个子组件上。这种情况下引用中获得的值是组件实例: + + + + + + +如果一个子组件使用的是选项式API,被引用的组件实例和该子组件的 this 完全一致,这意味着父组件对子组件的每一个属性和方法都有完全的访问权。这使得在父组件和子组件之间创建紧密耦合的实现细节变得很容易,当然也因此,应该只在绝对需要时才使用组件引用。大多数情况下,你应该首先使用标准的 props 和 emit 接口来实现父子组件交互。 + +expose 选项可以用于限制对子组件实例的访问: + +export default { + expose: ['publicData', 'publicMethod'], + data() { + return { + publicData: 'foo', + privateData: 'bar' + } + }, + methods: { + publicMethod() { + /* ... */ + }, + privateMethod() { + /* ... */ + } + } +} + + +在上面这个例子中,父组件通过模板引用访问到子组件实例后,仅能访问 publicData 和 publicMethod 。 + +1.5. 小结 +看完模板引用章节后,对模板引用小结一下。 + +从写法上来讲, ref attribute 就是模板引用,它可以获得挂载后的DOM元素或组件实例的引用。它是用于访问底层模板中的DOM元素的。 +你可能会问“我加个id=‘xxx’,不就可以通过id访问了?” +这个问题先不回答行或不行。 +其实在Vue中获取DOM的方法并不止一种,但官方推荐的是这种。所以现阶段,使用这种即可。 + +二、组件基础 ⭐ +组件允许我们将UI划分为独立的、可重用的部分,并且可以对每个部分进行单独的思考。在实际应用中,组件常常被组织成层层嵌套的树状结构: + +这和我们嵌套 HTML 元素的方式类似, Vue 实现了自己的组件模型,使我们可以在每个组件内封装自定义内容与逻辑。 Vue 同样也能很好地配合原生 Web Component。 + +2.1. 定义一个组件 +当使用构建步骤时,我们一般会将 Vue 组件定义在一个单独的 .vue 文件中,这被叫做单文件组件(简称SFC): + + + + + +当不使用构建步骤时,一个 Vue 组件以一个包含 Vue 特定选项的 JavaScript 对象来定义: + +export default { + data() { + return { + count: 0 + } + }, + template:` + ` +} + +这里的模板是一个内联的 JavaScript 字符串,Vue将会在运行时编译它。你也可以使用ID选择器来指向一个元素(通常是原生的