zoukankan      html  css  js  c++  java
  • vue笔记一

    一.Vue基本知识点

    1.声明式渲染

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

      

    ps:
    a.el指定了将vue挂载到那个元素上
    b.msg是响应式的,即只要改变,对应的元素将重新渲染

    2.if与for

    <div id="app">
    <p v-if="isShow">你看到我了</p>
    </div>
    <script>
    var app = new Vue({
    el: '#app',
    data: {
      isShow: true
    }
    })
    </script>
    
    <div id="app">
    <ul>
    <li v-for="item in list">{{ item }}</li>
    </ul>
    </div>
    <script>
    var app = new Vue({
    el: '#app',
    data: {
      list: ['a', 'b', 'c']
    }
    })
    </script>
    

      

    3.v-on和v-model

    v-on提供了绑定事件,v-model提供了表单和应用状态双向绑定

    <div id="app">
    <input v-model="msg">
    <button v-on:click="showMsg">点我</button>
    </div>
    <script>
    var app = new Vue({
    el: '#app',
    data: {
      msg: '输入'
    },
    methods: {
      showMsg: function () {
        alert(this.msg)
      }
    }
    })
    </script>
    

      

    二.数据与方法和实例的生命周期与钩子

    1.当一个 Vue 实例被创建时,它向 Vue 的响应式系统中加入了其 data 对象中能找到的所有的属性。当这些属性的值发生改变时,视图将会产生“响应”,即匹配更新为新的值。当这些数据改变时,视图会进行重渲染。值得注意的是只有当实例被创建时 data 中存在的属性是响应式的;不存在的则不会触发响应;

    2.实例的生命周期

    (摘自https://segmentfault.com/a/1190000008010666)

    三.模板语法

    1.v-once
    数据对象在改变的时候,绑定处的值也会改变;如果要改变这种情况,只绑定一次,即便数据对象改变,也不会重新绑定,可以使用v-once

    <span v-once>这个将不会改变: {{ msg }}</span>

    2.v-html
    {{}}会将内容解释为普通文本,但有时候,我们需要html,使用v-html

    <div v-html="rawHtml"></div>

    ps:
    rawHtml将会被解释为html

    3.v-bind
    mustache 语法不能作用在 HTML 特性上,也就是{{ value }}这种无法作用在html的特性上

    <div id="{{ value }}"></div> // 无法作用
    

      

    应该使用v-bind

    <div v-bind:id="value"></div>
    

      

    4.使用javascript

    <div v-bind:id="value + '_pk'"></div>
    

      

    限制:每个绑定都只能包含单个表达式,如果有if判断,请使用三元表达式

    5.指令
    指令 (Directives) 是带有 v- 前缀的特殊属性。指令属性的值预期是单个 JavaScript 表达式 (v-for 是例外情况)

    ps:一些指令可以带参数,如v-bind和v-on

    <a v-bind:href="url"></a>
    <a v-on:click="doSomething">
    

      

    6.修饰符
    修饰符 (Modifiers) 是以半角句号 . 指明的特殊后缀,用于指出一个指令应该以特殊方式绑定。

    <form v-on:submit.prevent="onSubmit"></form>
    

      

    7.缩写

    v-on可以缩写为@
    v-bind可以缩写为:

    <a :href="href">link</a>
    <a @onclick="onClick"></a>
    

      

    三.计算属性computed

    1.优点:
    计算属性可以摆脱将过于复杂的表达式写在模板内
    算属性是基于它们的依赖进行缓存的,只有相关依赖发生改变时才会重新求值

    2.计算属性示例:

    <div id="app">
    <span>{{ fullName }}</span>
    </div>
    <script>
    var app = new Vue({
    el: '#app',
    data: {
      firstName: 'first',
      lastName: 'last'
    },
    computed: {
      fullName: function() {
        return this.firstName + this.lastName
      }
    },
    methods: {
      showMsg: function () {
        alert(this.msg)
      }
    }
    })
    </script>
    

      

    ps:计算属性是一种属性,所以调用可以看到是不加小括号的

    3.默认情形下,计算属性只有getter,如果需要可以添加setter

    computed: {
      fullName: {
        // getter
        get: function () {
          return this.firstName + ' ' + this.lastName
        },
        // setter
        set: function (newValue) {
          var names = newValue.split(' ')
          this.firstName = names[0]
          this.lastName = names[names.length - 1]
        }
      }
    }
    

      

    四.观察者watch

    1.与计算属性的异同:
    同:都是基于一个属性变化来做出相应的
    异:计算属性一般用于同步操作,而观察者一般用于异步

    2.示例

    <template>
      <div id="app">
        <input v-model="name">
        <span>{{ age }}</span>
      </div>
    </template>
    
    <script>
    export default {
      name: 'app',
      data () {
        return {name: 'john', age: 0}
      },
      watch: {
        name: function (newName) {
          this.age = '正在获取年龄...'
          this.getAge()
        }
      },
      methods: {
        getAge () {
          let _this = this
          setTimeout(function () {
            _this.age = 20
          }, 5000)
        }
      }
    }
    </script>
    

      

    ps:
    在此示例中我们使用了v-model双向绑定,使用了setTimeOut来模拟异步获取数据

    五.class与style绑定

    1.class: 绑定一个属性

    <template>
      <div id="app">
        <span v-bind:class="{red: red}">文字显示</span>
      </div>
    </template>
    
    <script>
    export default {
      name: 'app',
      data () {
        return {red: true}
      }
    }
    </script>
    

      

    最终渲染为:
    <span class="red">文字显示</span>

    2.class: 绑定一个对象

    <template>
      <div id="app">
        <span v-bind:class="objClass">文字显示</span>
      </div>
    </template>
    
    <script>
    export default {
      name: 'app',
      data () {
        return {objClass: {
          red: true,
          large: true
        }}
      }
    }
    </script>
    

      

    最终渲染为:
    <span class="red large">文字显示</span>

    3.class: 数组语法

    <template>
      <div id="app">
        <span v-bind:class="[red, large]">文字显示</span>
      </div>
    </template>
    
    <script>
    export default {
      name: 'app',
      data () {
        return {
          red: 'red',
          large: 'large'
        }
      }
    }
    </script>
    

      

    最终渲染为:
    <span class="red large">文字显示</span>

    4.style:

    <span v-bind:style="{color: red, fontSize: 18 + 'px'}">文字显示</span>


    最终被渲染为:

    <span class="" style="color: red; font-size: 18px;">文字显示</span>
    

      

    ps:
    对于-分割css属性,需要使用驼峰命名或配合引号的短横线,所以上面的也可以写成

    <span v-bind:style="{color: red, 'font-size': 18 + 'px'}">文字显示</span>

    5.style: 绑定一个对象

    <template>
      <div id="app">
        <span v-bind:style="styleObject">文字显示</span>
      </div>
    </template>
    
    <script>
    export default {
      name: 'app',
      data () {
        return {
          styleObject: {
            color: 'red',
            'font-size': '18px'
          }
        }
      }
    }
    </script>
    

      

    六.条件指令


    1.示例

    <div v-if="type === 'A'">
      A
    </div>
    <div v-else-if="type === 'B'">
      B
    </div>
    <div v-else-if="type === 'C'">
      C
    </div>
    <div v-else>
      Not A/B/C
    </div>
    

      

    2.用key管理可复用的元素

    Vue 会尽可能高效地渲染元素,通常会复用已有元素而不是从头开始渲染.

    <template v-if="loginType === 'username'">
      <label>Username</label>
      <input placeholder="Enter your username">
    </template>
    <template v-else>
      <label>Email</label>
      <input placeholder="Enter your email address">
    </template>
    

      

    loginType的变化,不会清除掉用户之前输入的内容.

    如果要解决这个问题,可以添加一个key

    <template v-if="loginType === 'username'">
      <label>Username</label>
      <input placeholder="Enter your username" key="username-input">
    </template>
    <template v-else>
      <label>Email</label>
      <input placeholder="Enter your email address" key="email-input">
    </template>
    

      

    3.v-show
    v-show和v-if用法一样,不同的是v-show只是进行简单的css的display的变化.元素保留在dom中.

    4.v-if和v-for,一起用时,v-for有更高优先级.

  • 相关阅读:
    HDU 1016 Prime Ring Problem
    CreateRemoteThread函数多參数传入用法
    Dynamics CRM2015 on-premises直接升级Dynamics CRM2016 on-premises
    cocos2d-x+lua代码热载入(Hot Swap)的研究
    DirectX 9.0c游戏开发手记之“龙书”第二版学习笔记之8: Chap10: Lighting
    js合并table单元格(拼table的时候并不知道详细几行几列)
    简单图模板 Graph
    POJ-3278-Catch That Cow-广搜(BFS)
    android用存到缓存的方法来保存ListView里的数据
    Ubuntu 14.10中连接Win10的smb共享文件
  • 原文地址:https://www.cnblogs.com/itfenqing/p/7528958.html
Copyright © 2011-2022 走看看