四,计算属性

  基础例子

    <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. linux下重置mysql的root密码

    # /etc/init.d/mysql stop # mysqld_safe --user=mysql --skip-grant-tables --skip-networking & # my ...

  2. Google Tensorflow 源码编译(三):tensorflow<v0.5.0>

    这几天终于把tensorflow安装上了,中间遇到过不少的问题,这里记录下来.供大家想源码安装的参考. 安装环境:POWER8处理器,Docker容器Ubuntu14.04镜像. Build Tens ...

  3. HTML DOM元素的Dragdrop

    在前端web页面中,为了提高用户体验,通常会希望将页面中的元素设计成可dragdop的,简化用户操作.这一设计特性在缺少鼠标的触摸屏设备上,显得更为重要. 在早期的应用中,我们通常需要借助第三方的ja ...

  4. PBR实现

    我们的目标:UnityStandard 我一直作Unity开发,所以环境也就选择了Unity.目标也就是尽可能接近UnityStandard的效果,不过主要为了学习PBR,所以就只实现基本的PBR和法 ...

  5. 关于Winform 2.0以后多线程不能更新UI的办法

    DotNet 2.0以后Winform在多线程Debug模式下更新UI会报这个错: 线程间操作无效: 从不是创建控件"XXX"的线程访问它. 解决办法如下: 1.在Winform的 ...

  6. SQL Server 2008中的数据压缩

    SQL Server 2008中引入了数据压缩的功能,允许在表.索引和分区中执行数据压缩.这样不仅可以大大节省磁盘的占用空间,还允许将更多数据页装入内存中,从而降低磁 盘IO,提升查询的性能.当然,凡 ...

  7. Format specifies type 'int' but the argument has type 'struct node *'

    /Users/Rubert/IOS/iworkspace/LineList/LineList/main.c::: Format specifies type 'int' but the argumen ...

  8. 百度地图API地理位置和坐标转换

    1.由地名(省份.城市.街道等)得到其对应的百度地图坐标: http://api.map.baidu.com/geocoder/v2/?output=json&ak=你从百度申请到的Key&a ...

  9. git bash下对文件的操作

    window下的e盘中webpack文件夹操作 新建文件夹:mkdir wpdemo: 新建文件:touch index.html; 删除文件夹:rm -r wpdemo; 删除文件:rm index ...

  10. socket listen参数中的backlog 的意义!

    服务器监听时,在每次处理一个客户端的连接时是需要一定时间的,这个时间非常的短(也许只有1ms 或者还不到),但这个时间还是存在的.而这个backlog 存在的意义就是:在这段时间里面除了第一个连接请求 ...