vue.js計算屬性computed用法實例分析
本文實例講述了vue.js計算屬性computed用法。分享給大家供大家參考,具體如下:
需求:數據msg值為12345,我們現在需要反向顯示成54321。
在模板中綁定表達式是非常便利的,但是它們實際上只用于簡單的操作。在模板中放入太多的邏輯會讓模板過重且難以維護。例如:
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8">
<script src="https://cdn.bootcss.com/vue/2.5.16/vue.min.js"></script>
</head>
<body>
<div id="box">
{{msg}}
<hr>
{{ msg.split('').reverse().join('') }}
</div>
<script type="text/javascript">
var vm = new Vue({
el:'#box',
data:{
msg:'12345'
}
});
console.log(vm.reMsg);
</script>
</body>
</html>
使用本站HTML/CSS/JS在線運行測試工具:http://tools.jb51.net/code/HtmlJsRun,可得到如下測試運行效果:

Vue提供computed的方式。例如:
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8">
<script src="https://cdn.bootcss.com/vue/2.5.16/vue.min.js"></script>
</head>
<body>
<div id="box">
{{msg}}
<hr>
{{reMsg}}
</div>
<script type="text/javascript">
var vm = new Vue({
el:'#box',
data:{
msg:'12345'
},
computed:{
reMsg:function(){
return this.msg.split('').reverse().join('')
}
}
});
console.log(vm.reMsg);
</script>
</body>
</html>
同樣的可以達到效果!
但是這邊的reMsg是不能被修改的!! 也就是修改的時候他不會按照我們js給的規(guī)則去向反顯示,因為默認只有getter,我們可以提供一個setter:
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8">
<script src="https://cdn.bootcss.com/vue/2.5.16/vue.min.js"></script>
</head>
<body>
<div id="box">
{{msg}}
<hr>
{{reMsg}}
</div>
<script type="text/javascript">
var vm = new Vue({
el:'#box',
data:{
msg:'12345'
},
computed:{
reMsg:{
get:function(){
return this.msg.split('').reverse().join('')
},
set:function(value){
this.msg = value; //最后修改了msg
}
}
}
});
console.log(vm.reMsg = 'abcd'); //當我們修改這個變量的時候他的值也是跟隨著我們js規(guī)則反向顯示
</script>
</body>
</html>
使用本站HTML/CSS/JS在線運行測試工具:http://tools.jb51.net/code/HtmlJsRun,可得到如下測試運行效果:

表達式計算demo:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<!-- Vue.js -->
<script src="https://cdn.bootcss.com/vue/2.5.16/vue.min.js"></script>
</head>
<body>
<div>
<!--# 如表達式如果過長,或邏輯更為復雜時,就會變得臃腫甚至難以閱讀和維護 #-->
{{ text.split(',').reverse().join(',') }}
<!--# 所以在遇到復雜的邏輯時應該使用計算機屬性 #-->
</div>
<div id="app">
{{ reversedText }}
</div>
</body>
</html>
<script>
var app = new Vue({
el:'#app',
data:{
text:'123,456'
},
//所有的計算屬性都以函數的形式寫在vue實例內的computed選項內,最終返回計算的結果
computed:{
reversedText:function () {
//這里的this指向的是當前的vue實例
return this.text.split(',').reverse().join(',');
}
}
})
</script>
使用本站HTML/CSS/JS在線運行測試工具:http://tools.jb51.net/code/HtmlJsRun,可得到如下測試運行效果:

希望本文所述對大家vue.js程序設計有所幫助。
相關文章
Vue+Element一步步實現動態(tài)添加Input_輸入框案例
這篇文章主要介紹了Vue+Element一步步實現動態(tài)添加Input_輸入框案例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09
關于vue 結合原生js 解決echarts resize問題
這篇文章主要介紹了關于vue 結合原生js 解決echarts resize問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07

