【问题标题】:change text in single snackbar更改单个小吃栏中的文本
【发布时间】:2023-01-19 17:59:17
【问题描述】:

因此,有第 n 个字符串值。我需要在一段时间后在单个小吃栏上一个一个地显示这些字符串值。例如 - “This is snackbar one”应该显示 1 分钟,然后再次显示“This is snackbar 2”。

目前,我正在获取 snackbar 中的所有文本。请参考下图 -

HTML 模板 -

<template>
  <div>
    <v-app light>
      <v-snackbar
        v-model="snackbar"
        :multi-line="mode === 'multi-line'"
        :timeout="timeout"
        :top="y === 'top'"
        :color="'success'"
        :messages.sync="messages"
      >
        <div>{{ text }}</div>
        <v-btn @click="snackbar = false"> X </v-btn>
      </v-snackbar>
    </v-app>
  </div>
</template>
<script>
export default {
  data () {
    return {
      snackbar: true,
      y: "top",
      x: "right",
      mode: "",
      timeout: 6000,
      text: [
        "This is Snackbar ONE",
        "This is Snackbar TWO",
        "This is Snackbar THREE",
        "This is Snackbar FOUR",
        "This is Snackbar FIVE",
        "This is Snackbar SIX",
        "This is Snackbar SEVEN",
      ],
      indexText: 0,
      messages: [],
    };
  },

  async created() {
        showMessage() {
            console.log('this.text : ', this.text)
            if (this.indexText >= this.text.length) this.indexText = 0;
            this.messages.push(this.text[this.indexText++]);
            console.log('this.messages : ', this.messages)
       },
   },
};
</script>

还为 console.log 添加 SS -

【问题讨论】:

    标签: javascript html vuejs2 snackbar


    【解决方案1】:

    您的代码有问题,created 挂钩是异步的,因此您不能在创建的挂钩内调用 showMessage 函数。相反,您应该在 mounted 挂钩中调用 showMessage 函数。

    此外,您需要设置一个时间间隔以在一定时间间隔后调用showMessage 函数。

    这是更新后的代码,希望对您有所帮助:

    <template>
      <div>
        <v-app light>
          <v-snackbar
            v-model="snackbar"
            :multi-line="mode === 'multi-line'"
            :timeout="timeout"
            :top="y === 'top'"
            :color="'success'"
            :messages.sync="messages"
          >
            <div>{{ text }}</div>
            <v-btn @click="snackbar = false"> X </v-btn>
          </v-snackbar>
        </v-app>
      </div>
    </template>
    <script>
    export default {
      data() {
        return {
          snackbar: true,
          y: "top",
          x: "right",
          mode: "",
          timeout: 6000,
          text: [
            "This is Snackbar ONE",
            "This is Snackbar TWO",
            "This is Snackbar THREE",
            "This is Snackbar FOUR",
            "This is Snackbar FIVE",
            "This is Snackbar SIX",
            "This is Snackbar SEVEN",
          ],
          indexText: 0,
          messages: [],
        };
      },
      methods: {
        showMessage() {
          if (this.indexText >= this.text.length) this.indexText = 0;
          this.messages.push(this.text[this.indexText++]);
        },
      },
      mounted() {
        setInterval(() => {
          this.showMessage();
        }, 1000);
      },
    };
    </script>
    

    在上面的代码中,我添加了一个 mounted 钩子,并在其中设置了 1 秒(1000 毫秒)的间隔,这将在每 1 秒后调用 showMessage 函数。

    【讨论】:

    • 我试过了,但是第一个项目出现了,然后第一个和第二个都出现了,然后是给定时间间隔后的第一个、第二个和第三个。意味着它得到补充。我正在尝试,如果第一个项目出现,那么 1 分钟后第二个项目应该出现并消失第一个项目。此外,一旦所有项目都得到迭代,计数器应该再次从一个开始
    猜你喜欢
    • 2020-07-05
    • 1970-01-01
    • 2017-04-07
    • 2022-07-07
    • 2020-10-18
    • 1970-01-01
    • 1970-01-01
    • 2015-12-18
    • 1970-01-01
    相关资源
    最近更新 更多