fullName请解释为什么单击按钮时调用该方法?
// Отключим ненужные для примера
// сообщения в консоли.
Vue.config.productionTip = false;
Vue.config.devtools = false;
let sample = new Vue({
el: '.sample',
data: {
firstName: '',
lastName: '',
showText: false
},
methods: {
fullName() {
console.log('render fullname');
return this.firstName + ' ' + this.lastName;
}
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div class="wrapper">
<div class="sample">
<input type="text" v-model="firstName">
<hr>
<input type="text" v-model="lastName">
<hr>
<h2>Hello, {{ fullName() }}</h2>
<hr>
<button class="btn btn-success" @click="showText = !showText">
ToggleText
</button>
<hr>
<div v-show="showText">Some text</div>
</div>
</div>
https://codepen.io/anon/pen/voGPNq?editors=1010
我知道你需要将这个方法推入属性computed中,但我不明白它为什么以及如何工作,因为我不明白为什么fullName在属性中调用该方法methods。
当您单击按钮时,是重新绘制sample带有子元素的整体还是什么?
您问题中代码的简化和稍微修改的 HTML 标记:
这是您可以示意性地表示此片段的DOM树的方式:
我们还将 Vue 虚拟 DOM(VNode)示意性地表示为抽象数据结构:
VueJS 使用虚拟 DOM,如果需要进行更改,则首先对虚拟 DOM 进行更改,然后与原始 DOM 进行比较。最后的更改是对真实的 DOM 进行的。
在您看来,您如何确定函数(方法)的结果与原始结果不同?如果在这个函数中执行了任何异步操作?在这种情况下,您可能需要执行一个功能。并且它将始终执行,与计算属性 (
computed) 不同,计算属性 ( ) 的结果被缓存,并且仅当反应性依赖项发生变化时才执行重新计算(来自字段的数据,来自 的props其他data字段computed等)。回想一下,组件是具有自己名称的可重用 Vue 实例,并且具有与根实例相同的选项,例如
data、computed、watch等methods。每个组件在根元素内都有一个责任区域:
并且应用程序实例不能直接访问您在字段中指定其选择器的元素
el,例如:el: '#app'等el: '.sample'。在您的情况下:当字段更改时,
showTextDOM 会在带有 class 的块内重新呈现sample。并且在渲染时,它总是会被执行fullName()。有用的链接:什么是虚拟 DOM?(原创)。