Vue2入门笔记

107 阅读5分钟

Vue是一款用于构建交互式前端界面的JavaScript框架,它采用了基于MVVM模式的架构,使得我们可以很方便地编写可维护且易于理解的代码。在Vue中,我们可以通过v-bind指令将数据绑定到DOM属性上,也可以通过v-on指令监听DOM事件并执行相应的处理方法。除此之外,Vue还提供了指令修饰符、计算属性、组件等功能来帮助我们更好地开发应用程序。

下面,将逐一介绍Vue的各个方面。

1、Vue实例

Vue实例是一个构造函数,所以我们需要使用new操作符来创建一个Vue实例。在创建Vue实例时,我们可以通过配置选项传递一些数据和行为来控制Vue实例的运行方式。常用的配置选项包括:

  • el:表示Vue实例要挂载到的元素,可以是一个CSS选择器或一个DOM元素对象。
  • data:表示Vue实例的数据,可以是一个普通的JavaScript对象或一个函数,返回值为一个普通对象。
  • computed:表示Vue实例的计算属性,可以是一个包含getter和setter的对象或函数。
  • methods:表示Vue实例的方法,可以是一个包含一组方法的对象。
  • watch:表示Vue实例的监视者,可以是一个包含一组监听属性变化的回调函数的对象。

下面是一个实例化一个Vue对象的完整代码片段:

var app = new Vue({
    el: '#app',
    data: {
        message: 'Hello Vue!'
    },
    computed: {
        reversedMessage: function () {
            return this.message.split('').reverse().join('')
        }
    },
    methods: {
        greet: function (event) {
            alert('Hello ' + this.title + '!')
        }
    },
    watch: {
        message: function (newVal, oldVal) {
            console.log('message changed from ' + oldVal + ' to ' + newVal)
        }
    }
})

在这个例子中,我们创建了一个名为app的Vue实例,并将其挂载到了一个ID为app的元素上。数据部分定义了一个名为message的字符串,计算属性部分定义了一个名为reverseMessage的反转字符串的计算属性,方法部分定义了一个名为greet的方法用于弹出提示框,监视者部分定义了一个名为message的属性的监听器。

2、模板语法

Vue使用了一种基于HTML的模板语法,可以将Vue实例的数据绑定到DOM中。在Vue的模板语法中,我们可以使用双大括号语法({{}})将数据绑定到文本节点上,也可以使用v-bind指令将数据绑定到DOM属性上。除此之外,我们还可以使用v-if、v-show和v-for等指令来对DOM元素进行动态控制。

下面是一个包含Vue模板语法的例子:

<div id="app">
    <p>{{ message }}</p>
    <img v-bind:src="imageUrl">
    <div v-if="isShow">This is shown when isShow is true.</div>
    <ul>
        <li v-for="item in items">{{ item }}</li>
    </ul>
</div>

在这个例子中,我们使用了双大括号语法将message数据绑定到了一个p元素上,使用了v-bind指令将imageUrl数据绑定到了一个img元素上,使用了v-if指令和isShow属性来控制一个div元素是否被渲染出来,使用了v-for指令和items属性来循环渲染li元素。

3、指令

指令是Vue中常用的一种特殊属性,可以通过v-前缀来定义,并用于对DOM元素进行操作。常用的指令有v-bind、v-on、v-model、v-if、v-show、v-for等。指令还可以使用修饰符来修改其行为,常用的修饰符有.prevent、.stop、.capture、.once、.self等。

下面是一些常用的指令及其使用方法:

  • v-bind:用于绑定数据到DOM元素的属性上,可以使用简写方式“:”。
  • v-on:用于监听DOM事件并执行相应的处理方法,可以使用简写方式“@”。
  • v-model:用于在表单元素和Vue实例数据之间进行双向数据绑定。
  • v-if:用于条件性地渲染DOM元素,可以与v-else、v-else-if配合使用。
  • v-show:用于条件性地显示或隐藏DOM元素,不支持v-else。
  • v-for:用于循环渲染DOM元素,可以使用在多种数据类型上。

下面是一些指令的例子:

<!-- v-bind -->
<img v-bind:src="imageUrl">
<img :src="imageUrl">

<!-- v-on -->
<button v-on:click="incrementCounter">Add 1</button>
<button @click="incrementCounter">Add 1</button>

<!-- v-model -->
<input v-model="message">

<!-- v-if -->
<p v-if="showMessage">Hello Vue!</p>
<p v-else-if="isShow">Hello World!</p>
<p v-else>Goodbye!</p>

<!-- v-show -->
<p v-show="isVisible">This will always be rendered.</p>

<!-- v-for -->
<ul>
    <li v-for="item in items">{{ item }}</li>
</ul>

4、计算属性

计算属性是一种能够动态计算返回值的属性,它的返回值会被缓存起来,并在需要更新时进行更新。在Vue组件中,我们经常需要动态地计算属性值并将其绑定到DOM元素上,此时就可以使用计算属性来实现。

下面是一个计算属性的例子:

<div id="app">
    <input v-model="firstName">
    <input v-model="lastName">
    <p>Full name: {{ fullName }}</p>
</div>
var app = new Vue({
    el: '#app',
    data: {
        firstName: '',
        lastName: ''
    },
    computed: {
        fullName: function () {
            return this.firstName + ' ' + this.lastName
        }
    }
})

在这个例子中,我们定义了一个计算属性fullName,它的返回值为firstName和lastName的拼接。当firstName或lastName的值发生改变时,fullName会自动更新。

5、组件

Vue中的组件是一种可重用的Vue实例,可以通过prop属性传递数据,并对外暴露其内部状态。组件可以嵌套、传递数据、监听事件等,非常适合复杂应用程序的开发。

下面是一个组件的例子:

<template id="my-component">
    <div>
        <p>{{ message }}</p>
        <button v-on:click="emitEvent">Emit an event</button>
    </div>
</template>

<div id="app">
    <my-component v-bind:message="message"></my-component>
</div>
Vue.component('my-component', {
    template: '#my-component',
    props: ['message'],
    methods: {
        emitEvent: function () {
            this.$emit('my-event', 'hello from my-component')
        }
    }
})

var app = new Vue({
    el: '#app',
    data: {
        message: 'Hello from the parent!'
    },
    methods: {
        handleEvent: function (event) {
            console.log(event)
        }
    }
})

app.$on('my-event', app.handleEvent)

在这个例子中,我们定义了一个名为my-component的组件,并将其注册到Vue实例中。在模板中,我们可以像使用普通元素一样使用这个组件,Vue将自动创建并挂载这个组件,并渲染出它的DOM结构。通过props属性,我们可以将父组件的数据传递给子组件,子组件可以通过 this.message来访问这些数据;通过 $emit 方法,我们可以在子组件中触发一个自定义事件,并传递一些数据给父组件,父组件可以通过 $on方法来监听这个事件。