如題,在使用Vue
經常會遇到在computed
傳值,根據入參去渲染數據。找到的網上信息只是告訴我通過閉包傳值,但是不知道爲什麼。
直接看代碼
<script type="text/x-template" id="hello-world-template">
<div>
<p>Original message: "{{ message }}"</p>
<p>Computed reversed message: "{{ reversedMessage }}"</p>
<p>Computed reversed message: "{{ reversedMessage1(2) }}"</p>
</div>
</script>
<div id="example"></div>
<script>
var vm = new Vue({
el: '#example',
template: '#hello-world-template',
data: {
message: 'Hello'
},
computed: {
reversedMessage: function() {
return this.message.split('').reverse().join('')
},
// 計算屬性的 getter
reversedMessage1: function() {
return function reversedMessageget(y) {
return this.message.split('').reverse().join('')+'___'+y;
}
},
},
mounted(){
console.log(this)
}
})
</script>
Vue解析computed
,本質上是在當前組件this下通過Object.defineProperties()
方法創建新建一個reversedMessage
,reversedMessage1
變量。
但是在js的代碼看到reversedMessage
是基本類型,reversedMessage1
都是function。這是爲什麼呢?其實上面利用的就是defineProperties
的get
方法。
上面computed
代碼可以轉換成這樣:
reversedMessage: {
get: function () {
return this.message.split('').reverse().join('')
},
},
reversedMessage1: {
get: function () {
return function reversedMessageget(y) {
var str = this.message.split('').reverse().join('');
return str;
}
}
}
這樣就好理解,只是簡寫了變量的get方法,外面那層匿名函數就是個空殼子。
聲明變量的類型就是通過get裏的返回值,真正接收參數的是內部函數。
所以Vue
的computed
是通過閉包函數進行傳值。
https://cn.vuejs.org/v2/guide/computed.html#基礎例子
嗨,沒好好看官網!就發了吧