如何防止 Phoenix Live View 删除 JavaScript 放置的 DOM 元素?
How do I prevent a Phoenix Live View from removing DOM elements put there by JavaScript?
我还没有找到一种方法来始终阻止 Phoenix Live Views 从 DOM 中删除由 JavaScript 放置的元素。这是来自 crude chat app 的片段,它使用 JavaScript 在页面加载后添加笑脸:
<span><%= live_patch "New Chat", to: Routes.chat_index_path(@socket, :new) %></span>
<div id="smiley" style="font-size: 80px" phx-update="ignore"></div>
<script>
$(document).ready(function() {
$('#smiley').html('')
});
</script>
phx-update="ignore"
属性防止笑脸立即消失,但添加新聊天会导致笑脸消失:
您可以像这样使用 phx-hook
来防止它在新聊天后消失:
<div id="smiley" style="font-size: 80px" phx-hook="Smiley"></div>
并在 app.js 中:
let Hooks = {}
Hooks.Smiley = {
mounted() {
this.el.innerHTML = ''
}
}
let liveSocket = new LiveSocket("/live", Socket, {params: {_csrf_token: csrfToken}, hooks: Hooks})
完整代码在这里:https://github.com/ijt/rantclub/tree/c383530ce9749beb21f2c60605576f0d047043f8.
一个警告:出于某种原因,这并不能阻止 Delete 删除笑脸。
我还没有找到一种方法来始终阻止 Phoenix Live Views 从 DOM 中删除由 JavaScript 放置的元素。这是来自 crude chat app 的片段,它使用 JavaScript 在页面加载后添加笑脸:
<span><%= live_patch "New Chat", to: Routes.chat_index_path(@socket, :new) %></span>
<div id="smiley" style="font-size: 80px" phx-update="ignore"></div>
<script>
$(document).ready(function() {
$('#smiley').html('')
});
</script>
phx-update="ignore"
属性防止笑脸立即消失,但添加新聊天会导致笑脸消失:
您可以像这样使用 phx-hook
来防止它在新聊天后消失:
<div id="smiley" style="font-size: 80px" phx-hook="Smiley"></div>
并在 app.js 中:
let Hooks = {}
Hooks.Smiley = {
mounted() {
this.el.innerHTML = ''
}
}
let liveSocket = new LiveSocket("/live", Socket, {params: {_csrf_token: csrfToken}, hooks: Hooks})
完整代码在这里:https://github.com/ijt/rantclub/tree/c383530ce9749beb21f2c60605576f0d047043f8.
一个警告:出于某种原因,这并不能阻止 Delete 删除笑脸。