svelte toast bootstrap 仅在第二个事件后触发
svelte toast bootstrap fired only after second event
事件仅有时触发,通常是在第二次点击相同类型后。
因此,如果执行 1x 添加新的、1x 更新的、1x 删除的等操作,toast 更有可能不会触发...
但是如果相同的动作多次,比如 5x 添加新的,它会在第二次之后触发
...
// toast notify
import { Toast } from "bootstrap";
let toastEl;
let opc = { text: "", color: "" };
const mostrarMensaje = (text, color) => {
opc = {
text: text,
color: color,
};
new Toast(toastEl).show();
};
...
<!-- Toast notify -->
<div class="toast-container position-absolute top-0 end-0 p-3">
<div
bind:this={toastEl}
class="toast align-items-center text-dark bg-{opc.color}"
role="alert"
aria-live="assertive"
aria-atomic="true"
>
示例代码url:
https://svelte.dev/repl/04e5e8a7511b44aca203adeb5817f204?version=3.48.0
问题在于您在 toast 中设置背景颜色的方式:
class="toast align-items-center text-dark bg-{opc.color}"
最初,当组件第一次被渲染时(即使它没有显示),opc.color
是一个空字符串,使得最后的class在您的定义中 bg-
,这是无效的。
如果您最初将 opc.color
设置为 "success"
,您将在添加第一个待办事项时看到 toast 正确显示。 但是这不是解决方案,因为您执行其他操作、删除和更新后问题仍然存在。
解决方案是利用 Svelte 的 class:
表示法向 toast 添加条件 classes div:
class="toast align-items-center text-dark"
class:bg-success={opc.color === "success"}
class:bg-danger={opc.color === "danger"}
class:bg-warning={opc.color === "warning"}
这样,将根据 opc.color
的当前值附加正确的 class。
旁注:您将在链接的 REPL 中看到我删除了添加、删除和更新函数的响应式声明。这些 不需要 是反应式的,应该声明为正常的 functions/arrow 函数。
事件仅有时触发,通常是在第二次点击相同类型后。
因此,如果执行 1x 添加新的、1x 更新的、1x 删除的等操作,toast 更有可能不会触发...
但是如果相同的动作多次,比如 5x 添加新的,它会在第二次之后触发
...
// toast notify
import { Toast } from "bootstrap";
let toastEl;
let opc = { text: "", color: "" };
const mostrarMensaje = (text, color) => {
opc = {
text: text,
color: color,
};
new Toast(toastEl).show();
};
...
<!-- Toast notify -->
<div class="toast-container position-absolute top-0 end-0 p-3">
<div
bind:this={toastEl}
class="toast align-items-center text-dark bg-{opc.color}"
role="alert"
aria-live="assertive"
aria-atomic="true"
>
示例代码url: https://svelte.dev/repl/04e5e8a7511b44aca203adeb5817f204?version=3.48.0
问题在于您在 toast 中设置背景颜色的方式:
class="toast align-items-center text-dark bg-{opc.color}"
最初,当组件第一次被渲染时(即使它没有显示),opc.color
是一个空字符串,使得最后的class在您的定义中 bg-
,这是无效的。
如果您最初将 opc.color
设置为 "success"
,您将在添加第一个待办事项时看到 toast 正确显示。 但是这不是解决方案,因为您执行其他操作、删除和更新后问题仍然存在。
解决方案是利用 Svelte 的 class:
表示法向 toast 添加条件 classes div:
class="toast align-items-center text-dark"
class:bg-success={opc.color === "success"}
class:bg-danger={opc.color === "danger"}
class:bg-warning={opc.color === "warning"}
这样,将根据 opc.color
的当前值附加正确的 class。
旁注:您将在链接的 REPL 中看到我删除了添加、删除和更新函数的响应式声明。这些 不需要 是反应式的,应该声明为正常的 functions/arrow 函数。