• vue three day


    vue常用特性

    时间修饰符

    v-model.number 转化为int

    v-model.trim 去掉头尾空格

    v-model.lazy  将input事件变成change事件(input事件会实时更新双向绑定的数据,change事件则是失去焦点后更新)

    自定义指令

    下面案例让input标签自动获取焦点--语法:

    <input v-focus>
    <script>
    // 注册一个全局自定义指令 `v-focus`
    Vue.directive('focus', {
      // 当被绑定的元素插入到 DOM 中时……
      inserted: function (el) {
        // 聚焦元素
        el.focus()
      }
    })
    <script>

    局部注册:

    directives: {
      focus: {
        // 指令的定义
        inserted: function (el) {
          el.focus()
        }
      }
    }

    获取自定义指令的值:

    <input v-color="red">
    <script>
    // 注册一个全局自定义指令 `v-focus`
    Vue.directive('color', binding{
      // 当被绑定的元素插入到 DOM 中时……
      inserted: function (el) {
        console.log(binding.value)
      }
    })
    <script>

    一个指令定义对象可以提供如下几个钩子函数 (均为可选):

    • bind:只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。

    • inserted:被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)。

    • update:所在组件的 VNode 更新时调用,但是可能发生在其子 VNode 更新之前。指令的值可能发生了改变,也可能没有。但是你可以通过比较更新前后的值来忽略不必要的模板更新 (详细的钩子函数参数见下)。

    • componentUpdated:指令所在组件的 VNode 及其子 VNode 全部更新后调用。

    • unbind:只调用一次,指令与元素解绑时调用。

    计算属性

    <div id="example">
      <p>Original message: "{{ message }}"</p>
      <p>Computed reversed message: "{{ reversedMessage }}"</p>
    </div>
    <script>
    var vm = new Vue({
      el: '#example',
      data: {
        message: 'Hello'
      },
      computed: {
        // 计算属性的 getter
        reversedMessage: function () {
          // `this` 指向 vm 实例
          return this.message.split('').reverse().join('')
        }
      }
    })
    <scritp>

    方法关键字:methods,计算属性关键字:computed

    我们可以将同一函数定义为一个方法而不是一个计算属性。两种方式的最终结果确实是完全相同的。然而,不同的是计算属性是基于它们的响应式依赖进行缓存的。只在相关响应式依赖发生改变时它们才会重新求值。这就意味着只要 message 还没有发生改变,多次访问 reversedMessage 计算属性会立即返回之前的计算结果,而不必再次执行函数。

    侦听器

    Vue 提供了一种更通用的方式来观察和响应 Vue 实例上的数据变动:侦听属性。当你有一些数据需要随着其它数据变动而变动时,你很容易滥用 watch——特别是如果你之前使用过 AngularJS。然而,通常更好的做法是使用计算属性而不是命令式的 watch 回调。

    <div id="demo">{{ fullName }}</div>
    <script>
    var vm = new Vue({
      el: '#demo',
      data: {
        firstName: 'Foo',
        lastName: 'Bar',
        fullName: 'Foo Bar'
      },
      watch: {
        firstName: function (val) {
          this.fullName = val + ' ' + this.lastName
        },
        lastName: function (val) {
          this.fullName = this.firstName + ' ' + val
        }
      }
    })
    <script>

    关键字为watch,主要应用场景为异步或者开销比较大的位置。

    过滤器

    Vue.js 允许你自定义过滤器,可被用于一些常见的文本格式化。过滤器可以用在两个地方:双花括号插值和 v-bind 表达式 (后者从 2.1.0+ 开始支持)。过滤器应该被添加在 JavaScript 表达式的尾部,由“管道”符号指示:

    <!-- 在双花括号中 -->
    {{ message | capitalize }}
    <!-- 在双花括号中 串联使用多个过滤器 -->
    {{ message | filterA | filterB }}
    <!-- 在双花括号中 给过滤器传参 第一个默认是value 使用场景可以传类似格式化日期“yyyy-mm-dd”-->
    {{ message | filterA('arg1', arg2) }}
    <!-- 在 `v-bind` 中 -->
    <div v-bind:id="rawId | formatId"></div>
    
    <script>
    // 全局注册过滤器
    Vue.filter('capitalize', function (value) {
    // 第一个参数为过滤器名字,第二个是一个函数,value也就是函数里面传需要过滤器操作的数据,后面也可以继续传参
      if (!value) return ''
      value = value.toString()
      return value.charAt(0).toUpperCase() + value.slice(1)
    })
    
    // 也可以局部注册过滤器
    <script>

    生命周期钩子函数

    类似于flask钩子函数或者django的中间件

    挂载阶段

    按顺序触发钩子函数:

    beforeCreate:在实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用。

    created:在实例创建完成后被立即调用。在这一步,实例已完成以下的配置:数据观测 (data observer),property 和方法的运算,watch/event 事件回调。然而,挂载阶段还没开始,$el property 目前尚不可用。

    beforeMount:在挂载开始之前被调用:相关的 render 函数首次被调用

    mounted:

    实例被挂载后调用,这时 el 被新创建的 vm.$el 替换了。如果根实例挂载到了一个文档内的元素上,当 mounted 被调用时 vm.$el 也在文档内。 注意 mounted 不会保证所有的子组件也都一起被挂载。如果你希望等到整个视图都渲染完毕,可以在 mounted 内部使用 vm.$nextTick:

    mounted: function () {
      this.$nextTick(function () {
        // Code that will run only after the
        // entire view has been rendered
      })
    }

    更新

    beforeUpdate:数据更新时调用,发生在虚拟 DOM 打补丁之前。这里适合在更新之前访问现有的 DOM,比如手动移除已添加的事件监听器。

    updated:

    由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。 当这个钩子被调用时,组件 DOM 已经更新,所以你现在可以执行依赖于 DOM 的操作。然而在大多数情况下,你应该避免在此期间更改状态。如果要相应状态改变,通常最好使用计算属性或 watcher 取而代之。 注意 updated 不会保证所有的子组件也都一起被重绘。如果你希望等到整个视图都重绘完毕,可以在 updated 里使用 vm.$nextTick

    销毁

    beforeDestroy:实例销毁之前调用。在这一步,实例仍然完全可用。

    destroyed:实例销毁后调用。该钩子被调用后,对应 Vue 实例的所有指令都被解绑,所有的事件监听器被移除,所有的子实例也都被销毁。

  • 相关阅读:
    ListView滑动位置精准记忆
    2 GPS utility methods
    PingUtil in Android
    Android客户端的图形化拖放操作的设计实现
    腾讯视频去广告代码
    ie9不支持line-height_ie9不支持字体垂直居中兼容问题解决篇_IE9中字体不能垂直居中解决方法
    Web App开发的七个错误
    邮件页面的设计与网页页面设计的区别
    如何在ecshop商品页显示累计销售量
    如何让iframe的背景透明
  • 原文地址:https://www.cnblogs.com/zy-mousai/p/12988997.html
Copyright © 2020-2023  润新知