zoukankan      html  css  js  c++  java
  • 从零开始学Vue(一)—— Vue.js 入门

    概述

    vue.js作为现在笔记热门的JS框架,使用比较简单易上手,也成为很多公司首选的JS框架。 但是对于初学者可能学起来有些麻烦,所以推出《从零开始学Vue》系列博客,本系列计划推出19篇博客文章,这是最简单的入门第一篇! 如下是暂定的系列博客目录,欢迎有兴趣的同学关注学习~~

    系列博客目录一览(暂定)

    01 Vue.js入门 
    
    02 Vue.js实例
    
    03插值、指令
    
    04过滤器Filters
    
    05计算属性Computed
    
    06 Class与Style绑定
    
    07 监听属性 Watch
    
    08 条件渲染
    
    09 列表渲染v-for
    
    10 事件处理
    
    11 初识组件
    
    12 命令行工具(CLI)搭建
    
    13 介绍vue-cli工程目录结构
    
    14 组件嵌套/组件CSS作用域Scoped
    
    15 Props属性传值
    
    16 传值与传址
    
    17 自定义事件传值
    
    18 生命周期钩子
    
    19 路由

    1.1 Vue.js 概念

    Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。

    1.2 起步

    官方指南假设你已了解关于 HTMLCSS JavaScript 的中级知识。如果你刚开始学习前端开发,将框架作为你的第一步可能不是最好的主意——掌握好基础知识再来吧!之前有其它框架的使用经验会有帮助,但这不是必需的。

    1.3 初试Vue.js

    1.3.1 声明式渲染:模板语法——插值(文本)

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

    HTML:

    <div id="app">
    
      {{ message }}
    
    </div>

    JS:

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

    浏览器输出内容:Hello Vue!

    除了文本插值,我们还可以像这样来绑定元素特性:

    HTML:

    <div id="app-2">
    
      <span v-bind:title="message">
    
        鼠标悬停几秒钟查看此处动态绑定的提示信息!
    
      </span>
    
    </div>

    JS:

    var app2 = new Vue({
    
      el: '#app-2',
    
      data: {
    
        message: '页面加载于 ' + new Date().toLocaleString()
    
      }
    
    })

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

    1.3.2 模板语法——条件v-if与循环v-for

    控制切换一个元素是否显示也相当简单:

    HTML:

    <div id="app-3">
    
      <p v-if="seen">现在你看到我了</p>
    
    </div>

    JS:

    var app3 = new Vue({
    
      el: '#app-3',
    
      data: {
    
        seen: true
    
      }
    
    })

    浏览器输出打印:现在你看到我了

    注意这个例子演示了我们不仅可以把数据绑定到 DOM 文本或特性,还可以绑定到 DOM 结构。

    还有其它很多指令,每个都有特殊的功能。例如,v-for 指令可以绑定数组的数据来渲染一个项目列表:

    HTML:

    <div id="app-4">
    
      <ol>
    
        <li v-for="todo in todos">
    
          {{ todo.text }}
    
        </li>
    
      </ol>
    
    </div>

    JS

    var app4 = new Vue({
    
      el: '#app-4',
    
      data: {
    
        todos: [
    
          { text: '学习 JavaScript' },
    
          { text: '学习 Vue' },
    
          { text: '整个牛项目' }
    
        ]
    
      }
    
    })

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

    1.3.3 模板语法——处理用户输入

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

    HTML:

    <div id="app-5">
    
      <p>{{ message }}</p>
    
      <button v-on:click="reverseMessage">逆转消息</button>
    
    </div>

    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 来处理,你编写的代码只需要关注逻辑层面即可。

    1.3.4 双向数据绑定

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

    HTML:

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

    JS:

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

    1.3.5 组件化应用构建

    组件系统是 Vue 的另一个重要概念,因为它是一种抽象,允许我们使用小型、独立和通常可复用的组件构建大型应用。仔细想想,几乎任意类型的应用界面都可以抽象为一个组件树:

    Vue 里,一个组件本质上是一个拥有预定义选项的一个 Vue 实例。在 Vue 中注册组件很简单:

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

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

    <ol>
    
      <!-- 创建一个 todo-item 组件的实例 -->
    
      <todo-item></todo-item>
    
    </ol>

    但是这样会为每个待办项渲染同样的文本,这看起来并不炫酷。我们应该能从父作用域将数据传到子组件才对。让我们来修改一下组件的定义,使之能够接受一个 prop

    Vue.component('todo-item', {
    
      // todo-item 组件现在接受一个
    
      // "prop",类似于一个自定义特性。
    
      // 这个 prop 名为 todo。
    
      props: ['todo'],
    
      template: '<li>{{ todo.text }}</li>'
    
    })

    现在,我们可以使用 v-bind 指令将待办项传到循环输出的每个组件中:

    <div id="app-7">
    
      <ol>
    
        <!--
    
          现在我们为每个 todo-item 提供 todo 对象
    
          todo 对象是变量,即其内容可以是动态的。
    
          我们也需要为每个组件提供一个“key”,稍后再
    
          作详细解释。
    
        -->
    
        <todo-item
    
          v-for="item in groceryList"
    
          v-bind:todo="item"
    
          v-bind:key="item.id">
    
        </todo-item>
    
      </ol>
    
    </div>
    
    Vue.component('todo-item', {
    
      props: ['todo'],
    
      template: '<li>{{ todo.text }}</li>'
    
    })
    
     
    
    var app7 = new Vue({
    
      el: '#app-7',
    
      data: {
    
        groceryList: [
    
          { id: 0, text: '蔬菜' },
    
          { id: 1, text: '奶酪' },
    
          { id: 2, text: '随便其它什么人吃的东西' }
    
        ]
    
      }
    
    })

    尽管这只是一个刻意设计的例子,但是我们已经设法将应用分割成了两个更小的单元。子单元通过 prop 接口与父单元进行了良好的解耦。我们现在可以进一步改进 <todo-item> 组件,提供更为复杂的模板和逻辑,而不会影响到父单元。

    在一个大型应用中,有必要将整个应用程序划分为组件,以使开发更易管理。在后续教程中我们将详述组件,不过这里有一个 (假想的) 例子,以展示使用了组件的应用模板是什么样的:

    <div id="app">
    
      <app-nav></app-nav>
    
      <app-view>
    
        <app-sidebar></app-sidebar>
    
        <app-content></app-content>
    
      </app-view>
    
    </div>
    【本文作者】@小风飞鱼
    【原文出处】http://www.cnblogs.com/qdjianghao/
    【版权声明】本文版权归原作者@小风飞鱼所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    【联系方式】1987289469
  • 相关阅读:
    Atitit s2018.6 s6 doc list on com pc.docx Atitit s2018.6 s6 doc list on com pc.docx  Aitit algo fix 算法系列补充.docx Atiitt 兼容性提示的艺术 attilax总结.docx Atitit 应用程序容器化总结 v2 s66.docx Atitit file cms api
    Atitit s2018.5 s5 doc list on com pc.docx  v2
    Atitit s2018.5 s5 doc list on com pc.docx  Acc 112237553.docx Acc baidu netdisk.docx Acc csdn 18821766710 attilax main num.docx Atiitt put post 工具 开发工具dev tool test.docx Atiitt 腾讯图像分类相册管家.docx
    Atitit s2018 s4 doc list dvchomepc dvccompc.docx .docx s2018 s4 doc compc dtS44 s2018 s4 doc dvcCompc dtS420 s2018 s4f doc homepc s2018 s4 doc compc dtS44(5 封私信 _ 44 条消息)WebSocket 有没有可能取代 AJAX
    Atitit s2018 s3 doc list alldvc.docx .docx s2018 s3f doc compc s2018 s3f doc homepc sum doc dvcCompc dtS312 s2018 s3f doc compcAtitit PathUtil 工具新特性新版本 v8 s312.docx s2018 s3f doc compcAtitit 操作日
    Atitit s2018.2 s2 doc list on home ntpc.docx  Atiitt uke制度体系 法律 法规 规章 条例 国王诏书.docx Atiitt 手写文字识别 讯飞科大 语音云.docx Atitit 代码托管与虚拟主机.docx Atitit 企业文化 每日心灵 鸡汤 值班 发布.docx Atitit 几大研发体系对比 Stage-Gat
    Atitit 文员招募规范 attilax总结
    Atitit r2017 r6 doc list on home ntpc.docx
    atitit r9 doc on home ntpc .docx
    Atitit.如何文章写好 论文 文章 如何写好论文 技术博客 v4
  • 原文地址:https://www.cnblogs.com/qdjianghao/p/10255320.html
Copyright © 2011-2022 走看看