简单介绍 Vue 核心最基本的功能

指令

你看到的 v-bind 特性被称为指令。指令带有前缀 v-,以表示它们是 Vue 提供的特殊特性。可能你已经猜到了,它们会在渲染的 DOM 上应用特殊的响应式行为。在这里,该指令的意思是:“将这个元素节点的 title 特性和 Vue 实例的 message 属性保持一致”。

HTML:
鼠标悬停几秒钟查看此处动态绑定的提示信息!
JS: var app2 = new Vue({ el: '#app-2', data: { message: '页面加载于 ' + new Date().toLocaleString() } })

处理用户输入

为了让用户和你的应用进行交互,我们可以用 v-on 指令添加一个事件监听器,通过它调用在 Vue 实例中定义的方法:

HTML:

{{ message }}

JS: var app5 = new Vue({ el: '#app-5', data: { message: 'Hello Vue.js!' }, methods: { reverseMessage: function () { this.message = this.message.split('').reverse().join('') } } })

注意在 reverseMessage 方法中,我们更新了应用的状态,但没有触碰 DOM——所有的 DOM 操作都由 Vue 来处理,你编写的代码只需要关注逻辑层面即可。

Vue 还提供了 v-model 指令,它能轻松实现表单输入和应用状态之间的双向绑定。

{{ message }}

var app6 = new Vue({ el: '#app-6', data: { message: 'Hello Vue!' } })

组件

在 Vue 中注册组件很简单:

// 定义名为 todo-item 的新组件
Vue.component('todo-item', {
  template: '
  • 这是个待办项
  • ' })

    现在你可以用它构建另一个组件模板:

    但是这样会为每个待办项渲染同样的文本,这看起来并不炫酷。我们应该能从父作用域将数据传到子组件才对。让我们来修改一下组件的定义,使之能够接受一个 prop,现在,我们可以使用 v-bind 指令将待办项传到循环输出的每个组件中:

    Vue.component('todo-item', { props: ['todo'], template: '
  • {{ todo.text }}
  • ' }) var app7 = new Vue({ el: '#app-7', data: { groceryList: [ { id: 0, text: '蔬菜' }, { id: 1, text: '奶酪' }, { id: 2, text: '随便其它什么人吃的东西' } ] } })

    简单介绍 Vue 核心最基本的功能_第1张图片

     简单介绍 Vue 核心最基本的功能_第2张图片


    上面的子组件可以有props、data、template属性:

     简单介绍 Vue 核心最基本的功能_第3张图片

     data都是定义当前组件要用到的数据:

    // 定义一个名为 button-counter 的新组件
    Vue.component('button-counter', {
      data: function () {
        return {
          count: 0
        }
      },
      template: ''
    })

     组件复用

    你可以将组件进行任意次数的复用:

    简单介绍 Vue 核心最基本的功能_第4张图片

    注意当点击按钮时,每个组件都会各自独立维护它的 count。因为你每用一次组件,就会有一个它的新实例被创建。

    data必须是一个函数

    当我们定义这个  组件时,你可能会发现它的 data 并不是像这样直接提供一个对象():

    简单介绍 Vue 核心最基本的功能_第5张图片

    data: {
      count: 0
    }

    取而代之的是,一个组件的 data 选项必须是一个函数,因此每个实例可以维护一份被返回对象的独立的拷贝:

    data: function () {
      return {
        count: 0
      }
    }

    如果 Vue 没有这条规则,点击一个按钮就可能会像如下代码一样影响到其它所有实例

    你可能感兴趣的:(vue)