我正在使用Alpine显示将更改的项目列表。但是我不知道一旦服务器返回新的项目,如何告诉Alpine刷新项目列表:
<div x-data=" items() ">
<template x-for=" item in items " :key=" item ">
<div x-text=" item.name "></div>
</template>
</div>
项目的第一个“批次”很好,因为它们是在items()
函数中硬编码的:
function items(){
return {
items: [
{ name: 'aaron' },
{ name: 'becky' },
{ name: 'claude' },
{ name: 'david' }
]
};
}
Alpine以外的某些代码获取并接收一个全新的项目列表,我要显示这些列表而不是原始集合。我不知道怎么办,或者目前是否可行。感谢您的指导。
答案 0 :(得分:8)
有3种解决方法。
this.items
function items(){
return {
items: [
{ name: 'aaron' },
{ name: 'becky' },
{ name: 'claude' },
{ name: 'david' }
],
updateItems() {
// something, likely using fetch('/your-data-url').then((res) => )
this.items = newItems;
}
};
}
rootElement.__x.$data
并设置__x.$data.items = someValue
<script>
// some other script on the page
// using querySelector assumes there's only 1 Alpine component
document.querySelector('[x-data]').__x.$data.items = [];
</script>
更新为Alpine.js组件,请注意x-on:items-load.window="items = $event.detail.items"
:
<div x-data=" items() " x-on:items-load.window="items = $event.detail.items">
<template x-for=" item in items " :key=" item ">
<div x-text=" item.name "></div>
</template>
</div>
触发自定义事件的代码,您需要填写有效载荷。
<script>
let event = new CustomEvent("items-load", {
detail: {
items: []
}
});
window.dispatchEvent(event);
</script>