四,计算属性

  基础例子

    <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. [Spring MVC] - 500/404错误处理

    Spring MVC中404 找不到页面错误可以直接使用web.xml中配置: 在<web-app/>节点内加入: <error-page> <error-code> ...

  2. 数据绑定时(<%#Eval)单引号双引号嵌套问题

    期望得到的HTML如下: onclick='edit("10000001")' 或者 onclick="edit('10000001')" 实际ASP.NET前 ...

  3. PHP 获取指定目录下所有文件(包含子目录)

    PHP 获取指定目录下所有文件(包含子目录) //glob — 寻找与模式匹配的文件路径 $filter_dir = array('CVS', 'templates_c', 'log', 'img', ...

  4. 使用Ajax实现的批量删除操作(C#)

    今天做了一个简单的批量删除操作,虽然简单,但是很多问题出现,终究还是技术不够熟练. 现在在这里跟大家分享一下.仅供学习... 1.在前台获取用户点击的信息id,把这里id封装到一个数组里面:(rows ...

  5. 说说Web.Config与App.Config

    说到web.config和app.config大家都很熟悉,我们都叫他们配置文件,平时用的多,注意的少.两个有啥区别呢,很简单,一句话:如果是web程序,如webform项目类型和mvc项目类型就是w ...

  6. TensorFlow中max pooling层各参数的意义

    官方教程中没有解释pooling层各参数的意义,找了很久终于找到,在tensorflow/python/ops/gen_nn_ops.py中有写: def _max_pool(input, ksize ...

  7. 合并两个java bean对象非空属性(泛型)

    import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.PropertyDescriptor; cl ...

  8. 常见jquery插件

    1.JQuery Tooltipster 2.Bootstrap 3.jQuery UI 1.10

  9. C#预编译

    在C#开发中经常会遇到在Debug和Release模式下需要执行不同代码的情况,这个时候使用C#条件编译可以很好地解决这个问题,如 #if DEBUG // TO Do Debug Mode Code ...

  10. Angualr2 - 使用 VS2015

    使用 Vs 2015 快速上手 Angular2 许多程序员希望能够使用 VS2015 作为 IDE 来开发 Angular 2 应用,这里介绍如何设置 VS2015,使用快速上手文件来搭建 ASP. ...