vue基础指令

 

什么是Vue.js?

Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。

导包

<!-- 开发环境版本,包含了有帮助的命令行警告 -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

或者:

<!-- 生产环境版本,优化了尺寸和速度 -->
<script src="https://cdn.jsdelivr.net/npm/vue"></script>

声明式渲染

导包后,就可以通过用 Vue 函数创建一个新的 Vue 实例,

<div id="app">
    <p>{{msg}}</p>
</div>
<script>
    var vm = new Vue({
        el : '#app',
        data : {
            msg :'123'
        }
    })
</script>    

修改 app.msg 的值,html中的值将同步更新。

这跟渲染一个字符串模板非常类似,但是 Vue 在背后做了大量工作。现在数据和 DOM 已经被建立了关联,所有东西都是响应式的。

 

但只有当实例被创建时 data 中存在的属性才是响应式的,在添加属性时,不会触发任何视图的更新。

这里唯一的例外是使用 Object.freeze(),这会阻止修改现有的属性,也意味着响应系统无法再追踪变化。

 

一个 Vue 应用由一个通过 new Vue 创建的根 Vue 实例,以及可选的嵌套的、可复用的组件树组成。

我们的学习目的肯定不止于创建简单的 Vue 实例;而是用它去实现更加多变的功能需求;那我们需要进一步去学习 Vue-routerVuex 以及 Vue-cli


 

vue指令

每种指令的具体详解如下:

v-if 

<div id="app-3">
  <p v-if="seen">现在你看到我了</p>
</div>
var app3 = new Vue({
  el: '#app-3',
  data: {
    seen: true
  }
})

当 v-if = true ,消息可显示。

继续在控制台输入 app3.seen = false,则会发现之前显示的消息消失了。

 

可以使用 v-else 指令来表示 v-if 的“else 块”:

v-else 元素必须紧跟在带 v-if 或者 v-else-if 的元素的后面,否则它将不会被识别。

 


 

v-for

v-for 指令可以绑定数组的数据来渲染一个项目列表

<div id="app-4">
  <ol>
    <li v-for="todo in todos">
      {{ todo.text }}
    </li>
  </ol>
</div>
var app4 = new Vue({
  el: '#app-4',
  data: {
    todos: [
      { text: '学习 JavaScript' },
      { text: '学习 Vue' },
      { text: '整个牛项目' }
    ]
  }
})

学习 JavaScript

学习 Vue

整个牛项目

在控制台里,输入 app4.todos.push({ text: '新项目' }),你会发现列表最后添加了一个 新项目。

 

用 v-for 指令遍历数组

v-for 指令需要使用 item in items 形式的特殊语法,其中 items 是源数据数组,而 item 则是被迭代的数组元素的别名。

<ul id="example-2">
  <li v-for="(item, index) in items">
    {{ parentMessage }} - {{ index }} - {{ item.message }}
  </li>
</ul>
var example2 = new Vue({
  el: '#example-2',
  data: {
    parentMessage: 'Parent',
    items: [
      { message: 'Foo' },
      { message: 'Bar' }
    ]
  }
})
  • Parent-0-Foo
  • Parent-1-Bar

用 v-for 来遍历对象

<div v-for="(value, name) in object">
  {{ name }}: {{ value }}
</div>
new Vue({
  el: '#v-for-object',
  data: {
    object: {
      title: 'How to do lists in Vue',
      author: 'Jane Doe',
      publishedAt: '2016-04-10'
    }
  }
})
title: How to do lists in Vue
author: Jane Doe
publishedAt: 2016-04-10

在2.2.0+中,在组件中使用v-for时,key是必须的(保证数据的唯一性)

注意:

1、v-for循环的时候,key属性只能使用 number 或者 string

2、key在使用时,必须使用 v-bind 绑定的形式,指定 key 的值

 


 

属性绑定 v-bind(:)

v-bind

语法为: v-bind:title="message"

该指令的意思是:“将这个元素节点的 title 特性和 Vue 实例的 message 属性保持一致”。

 

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

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

渲染为:

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

如果你也想根据条件切换列表中的 class,可以用三元表达式

<div v-bind:class="[isActive ? activeClass : '', errorClass]"></div>

这样写将始终添加 errorClass,但是只有在 isActive 是 truthy 时才添加 activeClass

不过,当有多个条件 class 时这样写有些繁琐。所以在数组语法中也可以使用对象语法

<div v-bind:class="[{ active: isActive }, errorClass]"></div>
 


处理用户输入 :

v-on(@)事件监听

<div id="app">
  <!-- `reverseMessage` 是在下面定义的方法名 -->
  <button v-on:click="reverseMessage">reverseMessage</button>
</div>
var app = new Vue({
    el: '#app',
    data: {
        message: 'Hello Vue.js!'
    },
    methods: {
        reverseMessage: function () {
            this.message = this.message.split('').reverse().join('')
        }
    }
})        

注:

split() 方法用于把一个字符串分割成字符串数组。

String.split(" ") 执行的操作与Array.join(" ") 执行的操作是相反的。

reverse( )方法使字符翻转。

v-on的事件修饰符:

  • .stop
  • .prevent
  • .capture
  • .self:事件不是从内部元素触发的
  • .once:点击事件将只会触发一次
  • .passive:滚动事件的默认行为 (即滚动行为) 将会立即触发
  • .exact :允许你控制由精确的系统修饰符组合触发的事件。

 


 

v-model  双向绑定

通过v-model 指令,能轻松实现表单输入和应用状态之间的双向绑定。

v-model一般用于表单元素。

<div id="app-6">
  <p>{{ message }}</p>
  <input v-model="message">
</div>

 在使用时要注意以下几点:

1、v-model 会忽略所有表单元素的 valuecheckedselected 特性的初始值而总是将 Vue 实例的数据作为数据来源。因此需要通过 JavaScript 在组件的 data 选项中声明初始值。

  v-model 在内部为不同的输入元素使用不同的属性并抛出不同的事件:

  • text 和 textarea 元素使用 value 属性和 input 事件;
  • checkbox 和 radio 使用 checked 属性和 change 事件;
  • select 字段将 value 作为 prop 并将 change 作为事件。

2、在文本区域插值 (<textarea>{{text}}</textarea>) 并不会生效,应用 v-model 来代替。

修饰符

.lazy

在默认情况下,v-model 在每次 input 事件触发后将输入框的值与数据进行同步,可以添加 lazy 修饰符,从而转变为使用 change 事件进行同步:

<!-- 在“change”时而非“input”时更新 -->
<input v-model.lazy="msg" >

.number

自动将用户的输入值转为数值类型

<input v-model.number="age" type="number">

.trim

过滤首尾空白符

<input v-model.trim="msg">

 

 

 

 

 

 

posted @ 2019-08-13 15:35  Olina_Chenry  阅读(192)  评论(0编辑  收藏  举报