Вычисляемые свойства
Встраиваемые в шаблоны выражения удобны, но могут предназначаться только для простых операций. При усложнении логики их труднее поддерживать:
<div id="example">
{{ message.split('').reverse().join('') }}
</div>
Такой шаблон уже не выглядит простым и декларативным. С первого взгляда и не скажешь, что он всего лишь отображает message
задом наперёд. Ситуация станет ещё хуже, если эту логику потребуется использовать в нескольких местах шаблона.
На помощь здесь приходят вычисляемые свойства.
Простой пример
<div id="example">
<p>Изначальное сообщение: «{{ message }}»</p>
<p>Сообщение задом наперёд: «{{ reversedMessage }}»</p>
</div>
var vm = new Vue({
el: '#example',
data: {
message: 'Привет'
},
computed: {
// геттер вычисляемого значения
reversedMessage: function () {
// `this` указывает на экземпляр vm
return this.message.split('').reverse().join('')
}
}
})
Результат:

Мы определили вычисляемое свойство reversedMessage
. Написанная нами функция будет использоваться как геттер свойства vm.reversedMessage
:
console.log(vm.reversedMessage) // => 'тевирП'
vm.message = 'Пока'
console.log(vm.reversedMessage) // => 'акоП'
В шаблонах можно обращаться к вычисляемым свойствам как и к обычным. Vue знает, что vm.reversedMessage
зависит от vm.message
, поэтому при обновлении vm.message
обновятся и все зависящие от него элементы, в нашем случае обновится vm.reversedMessage
. Самое важное — эту зависимость теперь мы указали декларативно: геттер вычисляемого свойства не имеет побочных эффектов, что упрощает понимание кода и его тестирование.
Last updated
Was this helpful?