四,计算属性

  基础例子

    <div id=‘example’>

      <p>0riginal message: “{{message}}”</p>

      <p>Computed reversed message:”{{reversedMessage}}”</p>

    </div>

    Var vm = new Vue({

      el: “#example”,

      data: {

        message: ‘Hello’

      },

      computed: {

        reversedMessage: function() {

        return this.message.split(“ ”).reverse().join(‘ ’)

      }

    }

  })

  声明了一个计算属性 reversedMessage 。我们提供的函数将用作属性 vm.reversedMessage 的 getter

    console.log(vm.reversedMessage)   // olleH

    vm.message = ‘Goodbye’

    console.log(vm.reversedMessage) // eybdooG

  计算缓存

  注意到我们可以通过调用表达式中的method来达到同样的效果:

    <p>Reversed message: "{{ reverseMessage() }}"</p>

    methods: {

      reverseMessage: function (){

      return this.message.split(‘ ’).reverse().join(‘ ’)

      }

    }

  计算属性是基于它的依赖缓存。计算属性只有在它的相关依赖发生改变时才会重新取值。这就意味着只要message 没有发生改变,多次访问 reversedMessage 计算属性会立即返回之前的计算结果,而不必再次执行函数。

  计算属性 watched Property

  Vue提供了一个方法 $watch, 它用于观察vue 实例上的数据变动。

  <div id=‘demo’>{fullName{}}</div>

    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

      }

    }

  })

  计算 setter

  计算属性默认只有getter, 不过在需要时你也可以提供一个setter:

    computed: {

      fullName: {

        get: function () {

        Return this.firstName +””+this.lastName

      },

      set: function (newValue) {

        Var names = newValue.split(‘ ’)

        this.firstName = name[0]

        this.lastName = name[names.length - 1]

      }

    }

  }

  现在在运行 vm.fullName = 'John Doe' 时, setter 会被调用, vm.firstName 和 vm.lastName 也会被对应更新。

  观察watchers

  Vue 提供一个更通用的方法通过watch 选项,来响应数据的变化,当你想要在数据变化响应时,执行异步操作或开销较大的操作。

  <div id="watch-example">

    <p>

      Ask a yes/no question:

      <input v-model="question">

    </p>

     <p>{{ answer }}</p>

  </div>

  <script>

    var watchExampleVM = new Vue({

       el: '#watch-example',

      data: {

        question: '',

        answer: 'I cannot give you an answer until you ask a question!'

      },

      watch: {

// 如果 question 发生改变,这个函数就会运行

question: function (newQuestion) {

   this.answer = 'Waiting for you to stop typing...'

   this.getAnswer()

  }

  },

   methods: {

  // _.debounce 是一个通过 lodash 限制操作频率的函数。

  // 在这个例子中,我们希望限制访问yesno.wtf/api的频率

   // ajax请求直到用户输入完毕才会发出

   // 学习更多关于 _.debounce function (and its cousin

   // _.throttle), 参考: https://lodash.com/docs#debounce

   getAnswer: _.debounce(

    function () {

    var vm = this

     if (this.question.indexOf('?') === -1) {

     vm.answer = 'Questions usually contain a question mark. ;-)'

    return

  }

vm.answer = 'Thinking...'

axios.get('https://yesno.wtf/api')

.then(function (response) {

     vm.answer = _.capitalize(response.data.answer)

  })

.catch(function (error) {

    vm.answer = 'Error! Could not reach the API. ' + error

      })

   },

  // 这是我们为用户停止输入等待的毫秒数

   500

  )

  }

})

</script>

VUE 入门基础(4)的更多相关文章

  1. Vue学习记录第一篇——Vue入门基础

    前面的话 Vue中文文档写得很好,界面清爽,内容翔实.但文档毕竟不是教程,文档一上来出现了大量的新概念,对于新手而言,并不友好.个人还是比较喜欢类似于<JS高级程序设计>的风格,从浅入深, ...

  2. Vue入门基础

    前面的话 Vue中文文档写得很好,界面清爽,内容翔实.但文档毕竟不是教程,文档一上来出现了大量的新概念,对于新手而言,并不友好.个人还是比较喜欢类似于<JS高级程序设计>的风格,从浅入深, ...

  3. vue入门基础知识点测试

    vue入门基础知识点测试 1.文本(值绑定){{var}}----控制<div></div>的值显示当前时间,且1秒更新一次.(可查阅 setinterval 函数,时间Dat ...

  4. Vue入门基础(火柴)

    前言 由于个人十分欣赏博友——小火柴的蓝色理想,他的博文我看了大多数,觉得十分的精彩,然而很多都是看后即忘.我想除了没有经常动手敲代码,更可能是在看的时候忽略了很多细节,因此打算把他的博文通通给“抄袭 ...

  5. VUE 入门基础(8)

    十,组件 使用组件 注册 可以通过以下这种方式创建一个Vue实例 new Vue({ el: '#some-element', }) 注册一个全局组件,你可以使用Vue.component(tagNa ...

  6. VUE 入门基础(7)

    八,事件处理器 监听事件 可以用v-on 指令监听DOM 事件来触发一些javaScript <div id="example-1"> <button v-on: ...

  7. 02 . Vue入门基础之条件渲染,列表渲染,事件处理器,表单控件绑定

    vue基础 声明式渲染 Vue.js 的核心是一个允许采用简洁的模板语法来声明式地将数据渲染进 DOM 的系统 Example1 <!DOCTYPE html> <html> ...

  8. VUE 入门基础(9)

    十一,深入响应式原理 声明响应式属性 由于Vue不允许动态添加根级响应式属性,所以你必须在初始化实例钱声明根级响应式属性,哪怕只有一个空值. var vm = new Vue({ data:{ // ...

  9. VUE 入门基础(6)

    六,条件渲染 v-if 添加一个条件块 <h1 v-if="ok">Yes</h1> 也可以用v-else 添加else 块 <template> ...

随机推荐

  1. Tuxedo 超时时间控制(转贴)

    以下是转贴: TUXEDO超时控制全功略 摘要: 本<功略>集中了TUXEDO应用中,可能涉及到的所有时间参数,并分别对其进行详细描述,不但对其出处.取值等基本属性进行查证,而且,通过分析 ...

  2. Javascript模式(第二章基本技巧)------读书笔记

    本章主要帮助大家写出高质量的JS代码的方法,模式和习惯,例如:避免使用全局变量,使用单个的var变量声明,缓存for循环的长度变量length等 一.尽量避免使用全局变量 1 每一个js环境都有一个全 ...

  3. [Linux] - Virtualbox-CentOS动态增加分区空间方法

    VirtualBox使用中,有时会因为当初分配空间不足导致出问题,可以使用如下方式增加分区空间: 一.VirtualBox设置: 1)到VirtualBox的安装目录下找到这个命令exe文件:vbox ...

  4. 《舌尖上的中国》第二季今日首播了,天猫食品也跟着首发,借力使力[bubuko.com]

    天猫旗下的天猫食品与央视CCTV-1栏目<舌尖上的中国>第二季(以下简称“舌尖2”)达成合作,天猫食品成为舌尖2独家合作平台,同步首发每期 节目中的食材和美食菜谱,舌尖2摄制组还将为同步上 ...

  5. C++的隐式类型转换与转换操作符

    C++标准允许隐式类型转换,即对特定的类,在特定条件下,某些参数或变量将隐形转换成类对象(创建临时对象).如果这种转换代价很大(调用类的构造函数),隐式转换将影响性能.隐式转换的发生条件:函数调用中, ...

  6. jquery 百度搜索

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  7. 手机平板等移动端适配跳转URL的js代码

    <script type="text/javascript"> if(/AppleWebKit.*mobile/i.test(navigator.userAgent) ...

  8. 菜单栏被flex页面遮挡解决办法

  9. 源码阅读笔记 - 2 std::vector (2) 关于Allocator Aware Container特性

    所有的STL容器,都保存一个或默认,或由用户提供的allocator的实例,用来提供对象内存分配和构造的方法(除了std::array),这样的容器,被称作Allocator Aware Contai ...

  10. Mysql的视图、存储过程、函数、索引全解析

    视图是查询命令结果构成的一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集合,并可以当作表来查询使用. 1创建视图 --格式:C ...