Mutation observer

v-mutate 指令使用了 Mutation Observer API。它提供了一个易于使用的接口,用于检测元素被更新的时间。

用例

默认情况下,v-mutate 指令将启用 Mutation Observer API 中所有可用的选项。 这可以通过两种方式之一加以修改。你可以使用 handleroptions 传递对象,也可以使用 v-mutate.attr.sub="onMutate"modifier 属性

template script


  1. <template>
  2. <div>
  3. <v-text-field v-model="content" label="Content"></v-text-field>
  4. <v-sheet v-mutate="onMutate">
  5. {{ content }}
  6. </v-sheet>
  7. Total mutations: {{ mutations }}
  8. </div>
  9. </template>
  1. <script>
  2. export default {
  3. data: () => ({
  4. mutations: 0,
  5. content: 'Hello, world!',
  6. }),
  7. methods: {
  8. onMutate () {
  9. this.mutations++
  10. },
  11. },
  12. }
  13. </script>

Mutation observer - 图1

API

从下面选择您想要的组件,并查看可用的属性、插槽、事件和函数。

Mutation observer - 图2

示例

下面是一些简单到复杂的例子。

Modifiers

v-mutate 指令接受了 Mutation Observer API 中所有可用选项。为了简洁起见,使用缩写—attr (attributes), child (childList), sub (subtree) and char (characterData)。

template script


  1. <template>
  2. <div>
  3. <div>
  4. <div class="text-center">
  5. <v-btn @click="content = !content">Change Content</v-btn>
  6. </div>
  7. <v-container>
  8. <v-row>
  9. <v-col
  10. cols="12"
  11. md="6"
  12. >
  13. <v-card>
  14. <v-card-title>Card 1</v-card-title>
  15. <div class="title text-center pb-3">
  16. Times Mutated: {{ card1 }}
  17. </div>
  18. <v-card-text v-mutate="() => onMutate('card1')">
  19. <p
  20. v-for="n in +content + 2"
  21. :key="n"
  22. :class="n === +content + 2 && 'mb-0'"
  23. >
  24. Suspendisse enim turpis, dictum sed, iaculis a, condimentum nec, nisi. Fusce fermentum odio nec arcu. Aenean ut eros et nisl sagittis vestibulum. Nunc interdum lacus sit amet orci. Phasellus nec sem in justo pellentesque facilisis.
  25. </p>
  26. </v-card-text>
  27. </v-card>
  28. </v-col>
  29. <v-col
  30. cols="12"
  31. md="6"
  32. >
  33. <v-card>
  34. <v-card-title>Card 2 (w/ once modifier)</v-card-title>
  35. <div class="title text-center pb-3">
  36. Times Mutated: {{ card2 }}
  37. </div>
  38. <v-card-text v-mutate.once="() => onMutate('card2')">
  39. <p
  40. v-for="n in +content + 2"
  41. :key="n"
  42. :class="n === +content + 2 && 'mb-0'"
  43. >
  44. Suspendisse enim turpis, dictum sed, iaculis a, condimentum nec, nisi. Fusce fermentum odio nec arcu. Aenean ut eros et nisl sagittis vestibulum. Nunc interdum lacus sit amet orci. Phasellus nec sem in justo pellentesque facilisis.
  45. </p>
  46. </v-card-text>
  47. </v-card>
  48. </v-col>
  49. </v-row>
  50. </v-container>
  51. </div>
  52. </div>
  53. </template>
  1. <script>
  2. export default {
  3. data: () => ({
  4. content: false,
  5. card1: 0,
  6. card2: 0,
  7. }),
  8. methods: {
  9. onMutate (card) {
  10. this[card]++
  11. },
  12. },
  13. }
  14. </script>

Mutation observer - 图3