Vue基础学习笔记

Vue.js

一套用于构建用户界面的渐进式框架,与其它大型框架不同的是,可以自底向上逐层应用。

Vue.js 的核心是一个允许采用简洁的模板语法来声明式地将数据渲染进 DOM 的系统
例如:

<div id="app">
  {
    { message }}
div>
var app = new Vue({
     
  el: '#app',
  data: {
     
    message: 'Hello Vue!'
  }
})
Hello Vue!
  1. 每个 Vue 应用都是通过用 Vue 函数创建一个新的 Vue 实例开始的
  2. 数据和 DOM 已经被建立了关联,所有东西都是响应式
  3. 一个 Vue 应用会将其挂载到一个 DOM 元素上 (这个例子是 #app) 然后对其进行完全控制

模板语法

Vue.js 使用了基于 HTML 的模板语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据。在底层的实现上,Vue 将模板编译成虚拟 DOM 渲染函数,把 DOM 操作次数减到最少。

插值

文本

数据绑定最常见的形式就是使用“Mustache”语法 (双大括号) 的文本插值:

<span>Message: {
    { msg }}span>

绑定的数据对象上 msg property 发生了改变,插值处的内容都会更新。

通过使用 v-once 指令,你也能执行一次性地插值,当数据改变时,插值处的内容不会更新。

<span v-once>这个将不会改变: {
    { msg }}span>

原始HTML

双大括号会将数据解释为普通文本,而非 HTML 代码。为了输出真正的 HTML,你需要使用 v-html 指令:

<p>{
    { rawHtml }}p>    
<p><span v-html="rawHtml">span>p> 

使用 JavaScript 表达式

对于所有的数据绑定,Vue.js 都提供了完全的 JavaScript 表达式支持。

{
    { number + 1 }}

{
    { ok ? 'YES' : 'NO' }}

{
    { message.split('').reverse().join('') }}

<div v-bind:id="'list-' + id">div>

指令

指令 (Directives) 是带有 v- 前缀的特殊 attribute(属性)

<p v-if="seen">现在你看到我了p>

这里,v-if 指令将根据表达式 seen 的值的真假来插入/移除

元素

参数

一些指令能够接收一个“参数”,在指令名称之后以冒号表示
例如:

<a v-bind:href="url">...a>

在这里 href 是参数,告知 v-bind 指令将该元素的 href attribute 与表达式 url 的值绑定。

<a v-on:click="doSomething">...a>

v-on 指令,它用于监听 DOM 事件

缩写


<a :href="url">...a>

<a @click="doSomething">...a>

Class 与 Style 绑定

操作元素的 class 列表和内联样式是数据绑定的一个常见需求。因为它们都是 attribute,所以我们可以用 v-bind 处理它们:只需要通过表达式计算出字符串结果即可。表达式结果的类型除了字符串之外,还可以是对象数组

绑定 HTML Class

对象语法

例如下模板:

<div
  class="static"
  v-bind:class="{ active: isActive, 'text-danger': hasError }"
>div>

和如下 data:

data: {
     
  isActive: true,
  hasError: false
}

结果渲染为:

<div class="static active">div>

isActive 或者 hasError 变化时,class 列表将相应地更新。例如,如果 hasError 的值为 true,class 列表将变为 "static active text-danger"

当然绑定的数据对象可以是一个对象,渲染的结果和上面一样:

<div v-bind:class="classObject">div>
data: {
     
  classObject: {
     
    active: true,
    'text-danger': false
  }
}

数组语法

我们可以把一个数组传给 v-bind:class,以应用一个 class 列表:

<div v-bind:class="[activeClass, errorClass]">div>
data: {
     
  activeClass: 'active',
  errorClass: 'text-danger'
}

渲染为:

<div class="active text-danger">div>

绑定内联样式

对象语法

v-bind:style 的对象语法十分直观——看着非常像 CSS,但其实是一个 JavaScript 对象。

<div v-bind:style="{
         color: activeColor, fontSize: fontSize + 'px' }">div>
data: {
     
  activeColor: 'red',
  fontSize: 30
}

直接绑定到一个样式对象通常更好,这会让模板更清晰:

<div v-bind:style="styleObject"></div>
data: {
     
  styleObject: {
     
    color: 'red',
    fontSize: '13px'
  }
}

条件渲染

v-ifv-else-ifv-else

v-if 指令用于条件性地渲染一块内容。这块内容只会在指令的表达式返回 truthy 值的时候被渲染。

<h1 v-if="awesome">Vue is awesome!</h1>

也可以用 v-else 添加“else-if 块”和“else 块”:

<h1 v-if="awesome">Vue is awesome!</h1>
<h1 v-else-if="msg1===“A">Vue is good!</h1>
<h1 v-else>Oh no </h1>