vue3

作者: 16325 | 来源:发表于2021-03-29 10:39 被阅读0次

基础功能

  • v-bind 绑定属性
  • v-on 绑定事件
  • v-model 表单输入和应用状态之间的双向绑定
  • v-if 控制显示
  • v-for 循环列表

根组件

const RootComponent = { 
  /* 选项 */ 
}
const app = Vue.createApp(RootComponent)
const vm = app.mount('#app')

生命周期

插值

  • 文本 {{ }}
  • 原始 HTML v-html
  • JavaScript 表达式 {{ number + 1 }}
  • 修饰符 <form v-on:submit.prevent="onSubmit">...</form>
  • 缩写
<!-- 完整语法 -->
<a v-on:click="doSomething"> ... </a>

<!-- 缩写 -->
<a @click="doSomething"> ... </a>

<!-- 动态参数的缩写 (2.6.0+) -->
<a @[event]="doSomething"> ... </a>

组件的属性

  • data(){}
  • methods {}
  • 计算属性
computed: {
    // 计算属性的 getter
    publishedBooksMessage() {
      // `this` 指向 vm 实例
      return this.author.books.length > 0 ? 'Yes' : 'No'
    }
  }
  • 计算属性 vs 方法 计算属性是基于它们的反应依赖关系缓存的. 计算属性默认只有 getter,不过在需要时你也可以提供一个 setter
  • watch 侦听器 Vue 通过 watch 选项提供了一个更通用的方法,来响应数据的变化
  • 计算属性 vs 侦听器 通常更好的做法是使用计算属性而不是命令式的 watch 回调.

条件渲染

  • v-if vs v-show v-if 是“真正”的条件渲染,因为它会确保在切换过程中,条件块内的事件监听器和子组件适当地被销毁和重建。相比之下,v-show 就简单得多——不管初始条件是什么,元素总是会被渲染,并且只是简单地基于 CSS 进行切换。

列表渲染

<ul id="array-rendering">
  <li v-for="item in items">
    {{ item.message }}
  </li>
</ul>

绑定事件

  • <button @click="counter += 1">Add 1</button>
  • <button @click="greet">Greet</button>
  • <button @click="say('what')">Say what</button>
    Vue 自动为 methods 绑定 this,以便于它始终指向组件实例。这将确保方法在用作事件监听或回调时保持正确的 this 指向。在定义 methods 时应避免使用箭头函数,因为这会阻止 Vue 绑定恰当的 this 指向。
  • <button @click="one($event), two($event)">
  • 事件修饰符
<!-- 阻止单击事件继续传播 -->
<a @click.stop="doThis"></a>

<!-- 提交事件不再重载页面 -->
<form @submit.prevent="onSubmit"></form>

<!-- 修饰符可以串联 -->
<a @click.stop.prevent="doThat"></a>

<!-- 只有修饰符 -->
<form @submit.prevent></form>

<!-- 添加事件监听器时使用事件捕获模式 -->
<!-- 即内部元素触发的事件先在此处理,然后才交由内部元素进行处理 -->
<div @click.capture="doThis">...</div>

<!-- 只当在 event.target 是当前元素自身时触发处理函数 -->
<!-- 即事件不是从内部元素触发的 -->
<div @click.self="doThat">...</div>
  • 按键修饰符
<!-- 只有在 `key` 是 `Enter` 时调用 `vm.submit()` -->
<input @keyup.enter="submit" />
  • 系统修饰符
<!-- Alt + Enter -->
<input @keyup.alt.enter="clear" />

<!-- Ctrl + Click -->
<div @click.ctrl="doSomething">Do something</div>
  • .exact 修饰符
<!-- 即使 Alt 或 Shift 被一同按下时也会触发 -->
<button @click.ctrl="onClick">A</button>

<!-- 有且只有 Ctrl 被按下的时候才触发 -->
<button @click.ctrl.exact="onCtrlClick">A</button>

<!-- 没有任何系统修饰符被按下的时候才触发 -->
<button @click.exact="onClick">A</button>
  • 鼠标按钮修饰符
.left
.right
.middle
这些修饰符会限制处理函数仅响应特定的鼠标按钮。

组件基础

  • 组件注册
const app = Vue.createApp({})

app.component('my-component-name', {
  // ... 选项 ...
})
  • 通过 Prop 向子组件传递数据
    通过props传递

  • 监听子组件事件
    在引用子组件处增加<blog-post ... @enlarge-text="postFontSize += $event"></blog-post>
    子组件可以通过调用内建的 $emit 方法并传入事件名称来触发一个事件:

<button @click="$emit('enlargeText', 0.1)">
  Enlarge text
</button>

我们可以在组件的 emits 选项中列出已抛出的事件:

app.component('blog-post', {
  props: ['title'],
  emits: ['enlargeText']
})
  • 通过插槽分发内容
app.component('alert-box', {
  template: `
    <div class="demo-alert-box">
      <strong>Error!</strong>
      <slot></slot>
    </div>
  `
})
  • 动态组件
    可以通过 Vue 的 <component> 元素加一个特殊的 is attribute 来实现:
<!-- 组件会在 `currentTabComponent` 改变时改变 -->
<component :is="currentTabComponent"></component>
  • 解析 DOM 模板时的注意事项
    有些 HTML 元素,诸如 <ul>、<ol>、<table> 和 <select>,对于哪些元素可以出现在其内部是有严格限制的。而有些元素,诸如 <li>、<tr> 和 <option>,只能出现在其它某些特定的元素内部。
    我们可以使用特殊的 v-is 指令作为一个变通的办法:
<table>
  <tr v-is="'blog-post-row'"></tr>
</table>

v-is 值应为 JavaScript 字符串文本

  • 大小写
    HTML attribute 名不区分大小写,因此浏览器将所有大写字符解释为小写。这意味着当你在 DOM 模板中使用时,驼峰 prop 名称和 event 处理器参数需要使用它们的 kebab-cased (横线字符分隔) 等效值
<!-- 在HTML则是横线字符分割 -->
<blog-post post-title="hello!"></blog-post>

相关文章

网友评论

      本文标题:vue3

      本文链接:https://www.haomeiwen.com/subject/grhpcltx.html