TL; RD:
1.ВЫ ПОЛНОСТЬЮ МОЖЕТЕ
2.Вы, вероятно, не должны
1.Вот способ заставить это работать.
Вместо того, чтобы отвечать значением, сумма отвечает функцией.Это позволяет изменять значение без какой-либо реактивности на работе.(подробнее об этом позже)
Вместо передачи значения в функцию sum передайте указатель (имя строки, которую можно найти)
new Vue({
el: "#app",
data() {
return {
data1: "",
data2: "",
result1: this.sum("data1", 1),
result2: this.sum("data2", 3.2)
};
},
methods: {
sum(number1, number2) {
return function() {
var n1 = this[number1] || 0;
return Number.parseFloat(n1) + Number.parseFloat(number2);
};
}
},
computed: {
computed1() {
return this.data1 * 1;
},
computed2() {
return this.data2 * 2;
}
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<input type="number" v-model="data1">
<input type="number" v-model="data2">
<p>result: {{result1()}}</p>
<p>result: {{result2()}}</p>
</div>
2.почему вы не должны
Vue бесконечно обрабатывать реактивность, используя computed and watch.всякий раз, когда в вашем шаблоне есть функция (при условии, что она находится за пределами оператора v-if
), она вычисляется каждый каждый раз, когда компонент перерисовывается.С простой функцией, такой как пример sum
, это может не иметь большого значения, но когда у вас есть более сложные функции, обработка ее с использованием вычисленного значения (или часов) будет только пересчитывать части, которые изменились.
Например, если вы измените data1
, result1
и result2
будут пересчитаны.Если вы используете вычисленный, только result1
будет пересчитан.