• vue 学习笔记


    非常感谢作者,写的非常牛逼:https://cn.vuejs.org/v2/guide/

    VUE :  HELLO WORLD

    <!DOCTYPE html>
    <html>
    <head>
      <title>My first Vue app</title>
      <script src="https://unpkg.com/vue"></script>
    </head>
    <body>
      <div id="app">
        {{ message }}
      </div>
    
      <script>
        var app = new Vue({
          el: '#app',
          data: {
            message: 'Hello Vue!'
          }
        })
      </script>
    </body>
    </html>

    VUE 构建用户界面的渐进框架,可以自底向上设计。

    vue.js 的核心是允许使用简洁的语法来 声明式江数据渲染进DOM系统。

    通过上边的代码,数据和dom 已经建立了联系。所有的东西都是响应式的。

    注意,我们不再和HTML直接交互,一个vue 应用会挂在到一个dom 元素上,(对应的例子式#app),通过对vue的控制来完全控制dom。那么html是入口,但其余的都会发生在新创建的vue 实例内部。

    除了文本的插值,我们还可以向这样来绑定attribute 

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

    这里我们遇到了一点新东西。你看的v-bind attribute 被称为指令。指令带有前缀,v- ,以表示他们是vue提供的特殊attrivute .该指令的含义是这个元素的title attribute 和vue 实例的message property 保持一致。

    vue 中的if语句的使用,代码如下:

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

    这个例子,演示了我们不仅可以把数据绑定到dom文本,或attribute ,还可以绑定到dom 结构。vue 提供了一个强大的过滤效果系统,可以在vue 插入/更新,移除元素应用的过滤效果。

    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: '整个牛项目' }
        ]
      }
    })
    结果:
    1. 学习javascript
    2. 学习 Vue
    3. 整个牛项目

    处理用户输入,

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

    <div id="app-5">
      <p>{{ message }}</p>
      <button v-on:click="reverseMessage">反转消息</button>
    </div>
    var app5 = new Vue({
      el: '#app-5',
      data: {
        message: 'Hello Vue.js!'
      },
      methods: {
        reverseMessage: function () {
          this.message = this.message.split('').reverse().join('')
        }
      }
    })

    v-model 的指令的使用详解:

    他可以轻松实现表单输入,和应用状态之间的双向绑定。v-model 的作用是实现双向绑定

    vue 的组件化构建:重点学习。

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

     在vue 里,一个组件的本质上是一个拥有预定义选项的一个Vue实例。

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

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

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

    但是这样会为每个代办向渲染同样的文本,这看起来并不炫酷,我们应该能从父作用域将数据传输到子组件才对。

    Vue.component('todo-item', {
      // todo-item 组件现在接受一个
      // "prop",类似于一个自定义 attribute。
      // 这个 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: '随便其它什么人吃的东西' }
        ]
      }
    })
    输出结果为
    1. 蔬菜
    2. 奶酪
    3. 随便其他什么人吃的东西

    尽管这知识一个可以设计的例子。我们已经没法将应用分割成更小的东西了。

    子单元prop 接口,与父单元,通过props 进行了解耦。我们进一步改进<todo-item>组件,提供更加复杂的模板和逻辑,而不会影响到父单元。

    在一个大型应用中,有必要将整个应用程序划分为组件,以使开发更容易管理。

    <div id="app">
      <app-nav></app-nav>
      <app-view>
        <app-sidebar></app-sidebar>
        <app-content></app-content>
      </app-view>
    </div>

    与自定义元素的关系,他是web组件规范的一部分,这是因为vue的组件语法部分参考了该规范。例如vue组件实现了

    vue 的实例。 vue api 参考文档:https://cn.vuejs.org/v2/api/#%E9%80%89%E9%A1%B9-%E6%95%B0%E6%8D%AE

    var vm = new Vue(
    {
    }
    )

    一个tode 应用组件树可以是这样的:

    根实例
    └─ TodoList
       ├─ TodoItem
       │  ├─ TodoButtonDelete
       │  └─ TodoButtonEdit
       └─ TodoListFooter
          ├─ TodosButtonClear
          └─ TodoListStatistics

    所有的组件组件,都是vue实例。并且接受相同的选项对象

    当一个vue 实例被创建时,他将data对象中的所有property 加如到vue的响应式系统中。当这些property的值发生改变时,试图将会产生响应。即匹配更新为新的值。

    // 我们的数据对象
    var data = { a: 1 }
    
    // 该对象被加入到一个 Vue 实例中
    var vm = new Vue({
      data: data
    })
    
    // 获得这个实例上的 property
    // 返回源数据中对应的字段
    vm.a == data.a // => true
    
    // 设置 property 也会影响到原始数据
    vm.a = 2
    data.a // => 2
    
    // ……反之亦然
    data.a = 3
    vm.a // => 3

    当这些数据改变时,试图会进行重渲染,指得注意的时,只有当实例被创建时就已经存在于data中的property 才是响应的,比如vm.b = 1.是不会响应的。

    如果一开始是空的,或不存在,你要设置一些初始值。

    data: {
      newTodoText: '',
      visitCount: 0,
      hideCompletedTodos: false,
      todos: [],
      error: null
    }

    这里唯一例外的是,使用Obje.freeze(),这回阻止修改现有的property ,也就是说响应系统无法在追踪变化。

    var obj = {
      foo: 'bar'
    }
    
    Object.freeze(obj)
    
    new Vue({
      el: '#app',
      data: obj
    })
    <div id="app">
      <p>{{ foo }}</p>
      <!-- 这里的 `foo` 不会更新! -->
      <button v-on:click="foo = 'baz'">Change it</button>
    </div>

    除了数据property ,Vue实例还暴露了一些有用的实例property 与方法,他们都有前缀,$,以便与用户的property 区分开来

    var data = { a: 1 }
    var vm = new Vue({
      el: '#example',
      data: data
    })
    
    vm.$data === data // => true
    vm.$el === document.getElementById('example') // => true
    
    // $watch 是一个实例方法
    vm.$watch('a', function (newValue, oldValue) {
      // 这个回调将在 `vm.a` 改变后调用
    })

    实例声明周期的钩子

    每个vue 实例,在被创建都要胫骨哦一系列的初始化过程,

    1. 数据的监听,

    2. 模板的编译,

    3. 实例挂在到dom

    这个过程会运行生命周期钩子函数,这给用户在不同阶段添加代码的机会。

    new Vue({
      data: {
        a: 1
      },
      created: function () {
        // `this` 指向 vm 实例
        console.log('a is: ' + this.a)
      }
    })

    上边的vue 没有与具体的dom 节点向关联。

    this 上下文指向调用他的vue实例。

    钩子有三个mounted ,updated,destroyed 。三个钩子函数

    数据的流程图如下:

  • 相关阅读:
    Security 前端页面配置
    使用HttpSession获取用户信息
    开启使用Tonken记住我功能
    基于注解的方式发送和订阅消费消息
    通过Security提供的SecurityContextHolder获取登录用户信息
    RabbitMQ 基于API的方式发送和消费消息
    TypeScript declare Object Array Interface methods All In One
    js get Set the first item All In One
    macOS run VSCode from terminal All In One
    在线 Java 语言编程 All In One
  • 原文地址:https://www.cnblogs.com/dousil/p/14522466.html
Copyright © 2020-2023  润新知