vue的computed源码_vuecomputed实现原理

hacker|
154

文章目录:

vue中的computed的方法如何封装,可以再其他页面公用

标签绑定不符合行为与结构分离的原则。

标签绑定唯一的优点是一眼就能看出什么元素绑定了事件标签绑定是绑定单个。动态绑定是批量。但现在借助开发者工具,已经不叫事了

比如 jQuery,或者引入第三方的库vuejs 本身并没有封装 ajax 或者 fetch 接口,Zepto 之类的。你需要自己写

前后台交互其实都是通过servlet来实现的。 即servlet写数据给前台,前台展示。前台提交数据,servlet处理。 框架只是封装了servlet,提供了更加简便,更加好维护的集成模式...

Vue中computed就是 实时计算 使用。 Vue检测到数据发生变动时就会执行对相应数据有引用的函数。 下面是一个demo。引用自己的vue.js就可以看效果。 利用computed可以做一些监控之类的效果。 title

vue的computed怎么使用

在模板中绑定表达式是非常便利的,但是它们实际上只用于简单的操作。模板是为了描述视图的结构。在模板中放入太多的逻辑会让模板过重且难以维护。这就是为什么 Vue.js 将绑定表达式限制为一个表达式。如果需要多于一个表达式的逻辑,应当使用**计算属性**。

基础例子

div id="example" a={{ a }}, b={{ b }} /div var vm = new Vue({ el: '#example', data: { a: 1 }, computed: { // 一个计算属性的 getter b: function () { // `this` 指向 vm 实例 return this.a + 1 } } })

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

console.log(vm.b) // - 2 vm.a = 2 console.log(vm.b) // - 3

你可以打开浏览器的控制台,修改 vm。vm.b 的值始终取决于 vm.a 的值。

你可以像绑定普通属性一样在模板中绑定计算属性。Vue 知道 vm.b 依赖于 vm.a,因此当 vm.a 发生改变时,依赖于 vm.b 的绑定也会更新。而且最妙的是我们是声明式地创建这种依赖关系:计算属性的 getter 是干净无副作用的,因此也是易于测试和理解的。

计算属性 vs. $watch

Vue.js 提供了一个方法 $watch,它用于观察 Vue 实例上的数据变动。当一些数据需要根据其它数据变化时, $watch 很诱人 —— 特别是如果你来自 AngularJS。不过,通常更好的办法是使用计算属性而不是一个命令式的 $watch 回调。考虑下面例子:

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

上面代码是命令式的重复的。跟计算属性对比:

var vm = new Vue({ data: { firstName: 'Foo', lastName: 'Bar' }, computed: { fullName: function () { return this.firstName + ' ' + this.lastName } } })

这样更好,不是吗?

计算 setter

计算属性默认只是 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] } } } // ...

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

vue 计算属性computed里面返回的对象,怎样在其他方法中获取

这篇文章主要为大家详细介绍了Vue computed计算属性的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

computed

computed:相当于method,返回function内return的值赋值在html的DOM上。但是多个{{}}使用了computed,computed内的function也只执行一次。仅当function内涉及到Vue实例绑定的data的值的改变,function才会从新执行,并修改DOM上的内容。

computed和method的对比

div id="example"

 {{ message.split('').reverse().join('') }}

/div

这个是vue官网一直拿来作为例子的代码。在{{}}可以很方便的放入单个表达式,但是当一个HTML的DOM里面存在太多的表达式,程序会变得很笨重难于维护。

html

div id="app9"

  9、method与computed的区别br/

  fullNamebr/

  {{fullName}}br/

  fullName2br/

  {{fullName}}br/

  fullNameMethodbr/

  {{getFullName()}}br/

  fullNameMethod2br/

  {{getFullName()}}br/

/div

js

var app9 = new Vue({

  el: '#app9',

  data: {

    firstName: 'Foo',

    lastName: 'Bar'

  },

  methods:{

    getFullName:function () {

      console.log("执行了methods")

      return this.firstName+" " +this.lastName;

    }

  },

  computed: {

    fullName: function () {

      console.log("执行了computed")

      return this.firstName + ' ' + this.lastName

    }

  }

})

setTimeout('app9.firstName="Foo2"',3000);

控制台输出的结果 

执行了computed 

执行了methods 

执行了methods 

执行了computed 

执行了methods 

执行了methods 

由此可见使用computed,function只会执行一次。当Vue实例中绑定的data数据改变的时候,computed也相对应的只改变一次。

相同点:在以上代码中,两个p标签都会打印出同样被反转的Hello。 

不同点: 

使用了methods的:HTML中,每一个调用了Vue的methods的方法,都需要执行一遍reversedMessage()这个方法; 

而使用computed计算属性的,只执行一遍将结果保存在缓存中。

computed和watch的对比

html

div id="demo"{{ fullName }}/div

js

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

 }

 }

})

var vm = new Vue({

 el: '#demo',

 data: {

 firstName: 'Foo',

 lastName: 'Bar'

 },

 computed: {

 fullName: function () {

  return this.firstName + ' ' + this.lastName

 }

 }

})

vue.js里的computed是什么意思

Vue中computed就是 实时计算 使用。

Vue检测到数据发生变动时就会执行对相应数据有引用的函数。

下面是一个demo。引用自己的vue.js就可以看效果。

利用computed可以做一些监控之类的效果。

!DOCTYPE html

html

head

meta charset="utf-8"

meta http-equiv="X-UA-Compatible" content="chrome=1,IE=edge"

titletitle/title

link href="" rel="stylesheet"

script src="js/vue.js"/script

/head

body

template id="vue"

input type="text" v-model="name" /

label v-for="cb in inputs"

input type="checkbox" value="{{cb.value}}" v-model="checkbox" /{{cb.name}}

/label br

div !--下面2个是一样的效果--

{{checkbox||json}}br

{{getCheckBoxes}}br

/div

div!--下面2个是一样的效果--

{{getName}}br

{{name}}

/div

/template

/body

script type="text/javascript"

var inputs = ['JAVA','C#','RUBY'].map(function (el,index) {

return {value:index,name:el};

});

var vm= new Vue({

el:'#vue',

data:{

name:'testName',

inputs:inputs,

checkbox:['0']

},

watch:{

//检测属性变化

'name':function(newValue,oldValue){

console.log('name has changed ',newValue,oldValue);

}

},

computed:{

getCheckBoxes:function(){

console.log('run getCheckBoxes');

return this.checkbox.join(',');

},

getName:function(){

console.log('run getName');

this.checkbox.join(',');

console.log("getName use checkbox");

return this.name;

}

}

});

/script

/html

vue数组里面的数据怎么computed

Vue中computed就是 实时计算 使用。

Vue检测到数据发生变动时就会执行对相应数据有引用的函数。

下面是一个demo。引用自己的vue.js就可以看效果。

利用computed可以做一些监控之类的效果。

!DOCTYPE html

html

head

meta charset="utf-8"

meta http-equiv="X-UA-Compatible" content="chrome=1,IE=edge"

titletitle/title

link href="" rel="stylesheet"

script src="js/vue.js"/script

/head

body

template id="vue"

input type="text" v-model="name" /

label v-for="cb in inputs"

input type="checkbox" value="{{cb.value}}" v-model="checkbox" /{{cb.name}}

/label br

div !--下面2个是一样的效果--

{{checkbox||json}}br

{{getCheckBoxes}}br

/div

div!--下面2个是一样的效果--

{{getName}}br

{{name}}

/div

/template

/body

script type="text/javascript"

var inputs = ['JAVA','C#','RUBY'].map(function (el,index) {

return {value:index,name:el};

});

var vm= new Vue({

el:'#vue',

data:{

name:'testName',

inputs:inputs,

checkbox:['0']

},

watch:{

//检测属性变化

'name':function(newValue,oldValue){

console.log('name has changed ',newValue,oldValue);

}

},

computed:{

getCheckBoxes:function(){

console.log('run getCheckBoxes');

return this.checkbox.join(',');

},

getName:function(){

console.log('run getName');

this.checkbox.join(',');

console.log("getName use checkbox");

return this.name;

}

}

});

/script

/html

3条大神的评论

  • avatar
    访客 2022-07-04 上午 12:29:20

    rset="utf-8" meta http-equiv="X-UA-Compatible" content="chrome=1,IE=edge"

  • avatar
    访客 2022-07-03 下午 09:14:43

    m.fullName = 'John Doe' 时,setter 会被调用,vm.firstName 和 vm.lastName 也会有相应更新。以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。vue 计算属性computed里面返回的对象,怎样在其他方法中获取这篇

  • avatar
    访客 2022-07-03 下午 01:37:23

    function (newValue) { var names = newValue.split(' ') this.firstName = names[0] this.lastName = names[names.len

发表评论