VSCode代码片段

在学习Vue的过程中,有些代码片段是需要经常写的,我们在VSCode中我们可以生成一个代码片段,方
便我们快速生成。

VSCode中的代码片段有固定的格式,所以一般会借助于一个在线工具来完成。
具体的步骤如下:

  • 第一步,复制自己需要生成代码片段的代码;
  • 第二步,https://snippet-generator.app/在该网站中生成代码片段;
  • 第三步,在VSCode中配置代码片段;

code -> preferences -> user snippets -> 选择对应的模板添加就行了。

模板语法

  • React的开发模式:
    • React使用的jsx,所以对应的代码都是编写的类似于js的一种语法;
    • 之后通过Babel将jsx编译成 React.createElement 函数调用;
  • Vue也支持jsx的开发模式:
    • 但是大多数情况下,使用基于HTML的模板语法;
    • 在模板中,允许开发者以声明式的方式将DOM和底层组件实例的数据绑定在一起;
    • 在底层的实现中,Vue将模板编译成虚拟DOM渲染函数;

Mustache双大括号语法

如果希望把数据显示到模板(template)中,使用最多的语法是 “Mustache”语法 (双大括号) 的文本插值。

  • data返回的对象是被添加到Vue的响应式系统中的,
  • 所以当data中的数据发生改变时,对应的内容也会发生更新。
  • Mustache中不仅仅可以是data中的属性,也可以是一个JavaScript的表达式。
  • 但不能写赋值语句比如:{{var name = 'cos'}} 这种是错误的语法。

v-once指令

v-once,指定元素或者组件只渲染一次

  • 当数据发生变化时,元素或者组件以及其所有的子元素将视为静态内容并且跳过
  • 该指令可以用于性能优化

image.png

  • 如果是子节点,也是只会渲染一次

image.png

v-text指令

用于更新元素的 textContent,如:v-text=”msg” 等价于 {{msg}}

v-html

默认情况下,如果我们展示的内容本身是 html 的,那么vue并不会对其进行特殊的解析。
如果我们希望这个内容被Vue可以解析出来,那么可以使用 v-html 来展示;
image.png

v-pre

v-pre用于跳过元素和它的子元素的编译过程,显示原始的Mustache标签,跳过不需要编译的节点,加快编译的速度;
image.png

v-cloak

这个指令保持在元素上直到关联组件实例结束编译,需要和 CSS 规则一起用时,如 [v-cloak] { display: none },可以隐藏未编译的 Mustache 标签直到组件实例准备完毕。
image.png

不会显示,直到编译结束。

v-bind

绑定属性我们使用v-bind

缩写::
预期:any (with argument) | Object (without argument)
参数:attrOrProp (optional)
修饰符:.camel - 将 kebab-case attribute 名转换为 camelCase
用法:动态地绑定一个或多个 attribute,或一个组件 prop 到表达式。

v-bind有一个对应的语法糖,也就是简写方式。我们通常会使用语法糖的形式,因为这样更加简洁。

v-bind绑定class

对象语法

语法

  • :class="{ className: bool }"
  • :class="classObj"
  • :class="['abc', 'cba', isActive? 'a' : 'c', {cos: isActive}, classObj]"

1- 对象语法:{'active': boolean}
2- 可以绑定多个class, {'active': isActive, title: true}
3- 对象中的class名称可以不加 ‘’
4- 会将原有的class 和动态绑定的class做一个结合 class="cos" :class="{active: isActive}"
5- 可以直接绑定data中的某个对象 :class="classObj", 绑定的classObj中不建议在对象中再去引用其他变量,我们要把它作为一个纯对象来使用
5- 将返回的对象放到方法,computed, watch 中

  1. <div id="app"></div>
  2. <template id="my-app">
  3. <div :class="{'active': isActive}">对象语法</div>
  4. <div :class="{'active': isActive, title: true}">可以绑定多个class</div>
  5. <div :class="{active: isActive, title: true}">对象中的class名称可以不加引号</div>
  6. <div class="cos" :class="{active: isActive}">
  7. 会将原有的class属性值和动态绑定的class做一个结合
  8. </div>
  9. <div class="cos" :class="classObj">可以直接绑定data中的某个对象</div>
  10. <div class="cos" :class="getClassObj()">将返回的对象放到方法,computed, watch 中</div>
  11. <button @click="handleClick">按钮</button>
  12. </template>
  13. <script>
  14. const App = {
  15. template: "#my-app",
  16. data() {
  17. return {
  18. isActive: false,
  19. // classObj: { active: !this.isActive }, // 这里我们不建议在对象中再去引用其他变量,我们要把它作为一个纯对象来使用
  20. classObj: { active: true, rose: true },
  21. };
  22. },
  23. methods: {
  24. handleClick() {
  25. this.isActive = !this.isActive;
  26. },
  27. getClassObj() {
  28. return { active: true, rose: true };
  29. },
  30. },
  31. };
  32. Vue.createApp(App).mount("#app");
  33. </script>

数组语法

1- 数组语法:['rose', 'abc']
2- 三元运算: ['rose', 'abc', isActive ? 'active': '']
3- 数组中添加对象: ['rose', 'abc', isActive ? 'active': '', {current: isActive}],这里其实写三元有点复杂,所以数组语法中也支持嵌套对象语法。

  1. <div id="app"></div>
  2. <template id="my-app">
  3. <div class="cos" :class="['rose', 'abc']">数组语法1</div>
  4. <div class="cos" :class="['rose', 'abc', isActive ? 'active': '']">
  5. 三元运算
  6. </div>
  7. <div
  8. class="cos"
  9. :class="['rose', 'abc', isActive ? 'active': '', {current: isActive}]"
  10. >
  11. 数组中添加对象
  12. </div>
  13. </template>
  14. <script>
  15. const App = {
  16. template: "#my-app",
  17. data() {
  18. return {
  19. isActive: false,
  20. classObj: { active: true, rose: true },
  21. };
  22. },
  23. };
  24. Vue.createApp(App).mount("#app");
  25. </script>

v-bind绑定style

CSS property 名可以用驼峰式 (camelCase) 或短横线分隔 (kebab-case,记得用引号括起来) 来命名

  • 绑定style对象语法

:style="包含css样式的对象"
:style="{属性名: '属性值'}"
1- {color: ‘red’} 这里需要注意属性值必须添加’’, 如果没有引号会将red当做变量去数据中寻找
2- { fontSize: ‘24px’} ,这里也可以写成烤串命名法,但是需要用’’包起来,否则会报错
3- {fontSize: ${finalFontSize}px} 也可以写成字符串拼接
4- :style=”finalStyleObj” 也可以直接绑定对象
5- 也可以写在方法或者计算属性中

  1. <div :style="{color: 'red'}">绑定style对象语法</div>
  2. <div :style="{color: 'red', fontSize: '24px'}">绑定style对象语法</div>
  3. <div :style="{color: 'red', 'font-size': '24px'}">绑定style对象语法</div>
  4. <div :style="{fontSize: `${finalFontSize}px`}">绑定style对象语法</div>
  5. <div :style="finalStyleObj">绑定style对象语法</div>
  6. <script>
  7. let App = {
  8. template: '#my-app',
  9. data() {
  10. return {
  11. finalFontSize: 50,
  12. finalStyleObj: {
  13. fontSize: '40px',
  14. color: 'red',
  15. background: 'blue',
  16. },
  17. };
  18. },
  19. };
  20. Vue.createApp(App).mount('#app');
  21. </script>
  • 数组语法
    • :style=”[styleObj1, styleObj2]” 会将 两个对象做个合并
      1. <div :style="[styleObj1, styleObj2]">绑定style对象语法</div>
      2. <script>
      3. let App = {
      4. template: '#my-app',
      5. data() {
      6. return {
      7. styleObj1: {
      8. fontSize: '65px',
      9. },
      10. styleObj2: {
      11. color: 'pink',
      12. },
      13. };
      14. },
      15. };
      16. Vue.createApp(App).mount('#app');
      17. </script>

      动态绑定属性

      在某些情况下,我们属性的名称可能也不是固定的:
      如果属性名称不是固定的,我们可以使用 :[属性名]='值' 的格式来定义
      这种绑定的方式,我们称之为动态绑定属性;
      1. <h2 :[name]="value">{{msg}}</h2>

绑定一个对象

如果我们希望将一个对象的所有属性,绑定到元素上的所有属性,应该怎么做呢?
非常简单,我们可以直接使用 v-bind 绑定一个 对象;
这种写法在高阶组件中常用。
案例:info对象会被拆解成div的各个属性

  1. <div v-bind="cos">属性直接绑定一个对象</div>
  2. <!--
  3. 这里是数据:
  4. cos: {
  5. name: 'wang',
  6. age: 28,
  7. job: 'web',
  8. },
  9. -->

效果如图:
image.png

v-on绑定事件

用户进行各种各样的交互的时候,就必须监听用户发生的事件,比如点击、拖拽、键盘事件等等
在Vue中可以使用v-on指令监听事件。

v-on的使用

  • 缩写:@
  • 预期:Function | Inline Statement | Object
  • 参数:event
  • 修饰符:
    • .stop - 调用 event.stopPropagation()
    • .prevent - 调用 event.preventDefault()
    • .capture - 添加事件侦听器时使用 capture 模式
    • .self - 只当事件是从侦听器绑定的元素本身触发时才触发回调
    • .{keyAlias} - 仅当事件是从特定键触发时才触发回调
    • .once - 只触发一次回调
    • .left - 只当点击鼠标左键时触发
    • .right - 只当点击鼠标右键时触发
    • .middle - 只当点击鼠标中键时触发
    • .passive - { passive: true } 模式添加侦听器
  • 用法:绑定事件监听
    1. <template id="my-app">
    2. <!-- 1-语法糖绑定事件 -->
    3. <div @click="handleClick">按钮</div>
    4. <!-- 2-绑定一个表达式 -->
    5. <div @click="counter ++">{{counter}}</div>
    6. <!-- 3-绑定一个对象 -->
    7. <div v-on="{click: handleClick, mousemove: handleMove}">
    8. 我绑定了点击和鼠标移动事件
    9. </div>
    10. <!-- 4- v-on的参数传递 -->
    11. <div @click="handleClick2">v-on传递参数1</div>
    12. <div @click="handleClick2($event, 'cos')">v-on传递参数2</div>
    13. </template>
    14. <script>
    15. const app = Vue.createApp({
    16. template: '#my-app',
    17. data() {
    18. return {
    19. counter: 100,
    20. };
    21. },
    22. methods: {
    23. handleClick() {
    24. console.log('click');
    25. },
    26. handleMove() {
    27. console.log('move');
    28. },
    29. handleClick2(event, name) {
    30. // 当按钮发生点击的时候浏览器会生成一个event对象,这个对象中会包含一些常用信息
    31. // 1- 默认绑定的形式
    32. console.log(event);
    33. // 2- 当传递多个参数的时候,第一个参数固定写作 $event,这个值可以拿到事件发生时的事件对象
    34. console.log(event, name);
    35. },
    36. },
    37. }).mount('#app');
    38. </script>