alpine.js data() x-数据指令
alpine.js data() x-data directive
我正在使用 alpine.js v3 和一些数据模块
import Foo from './foo';
import Bar from './bar';
window.Alpine = Alpine;
window.Alpine.data('data', () => ({
foo: Foo(),
bar: Bar(),
}));
window.Alpine.start();
<body x-data="data">
每当我尝试访问数据时
<button @click="data.foo.doSomething()">
我收到错误
Alpine Expression Error: data is not defined
我是否必须使用 x-data
指令添加它?
(更新)
以及如何从另一个组件访问此数据,例如
获取Foo
组件的status
,调用Bar
:
的方法
window.Alpine.bind('SomeButton', (name) => ({
'x-init'(){
const data = window.Alpine.$data;
if(data.foo.status === 'open'){
data.bar.doSomething();
}
}
});
用Alpine.data()
定义一个组件。之后,您可以直接访问通过 x-data
应用它的元素内组件的所有属性。这里 data
是组件,因此您不必在其属性前加上 data.
:
<div x-data="data">
<button @click="foo.doSomething()">Call doSomething()</button>
</div>
回答您的第二个问题:由于您有一个应用于最顶层元素 (body
) 的“全局”组件,因此每个子组件都可以访问该父组件的属性。所以在 SomeButton
"bind-object" 类型的组件中,我们可以使用 this.
前缀在组件的定义中访问它们。
window.Alpine.bind('SomeButton', () => ({
'@click'() {
if (this.foo.status === 'open') {
this.bar.doSomething()
}
}
})
这里我们将逻辑附加到 click-event:如果状态为 'open',我们调用 bar.doSomething()
。
<div x-data="data">
<button x-bind="SomeButton">Call bar.doSomething() if status is 'open'</button>
</div>
我正在使用 alpine.js v3 和一些数据模块
import Foo from './foo';
import Bar from './bar';
window.Alpine = Alpine;
window.Alpine.data('data', () => ({
foo: Foo(),
bar: Bar(),
}));
window.Alpine.start();
<body x-data="data">
每当我尝试访问数据时
<button @click="data.foo.doSomething()">
我收到错误
Alpine Expression Error: data is not defined
我是否必须使用 x-data
指令添加它?
(更新)
以及如何从另一个组件访问此数据,例如
获取Foo
组件的status
,调用Bar
:
window.Alpine.bind('SomeButton', (name) => ({
'x-init'(){
const data = window.Alpine.$data;
if(data.foo.status === 'open'){
data.bar.doSomething();
}
}
});
用Alpine.data()
定义一个组件。之后,您可以直接访问通过 x-data
应用它的元素内组件的所有属性。这里 data
是组件,因此您不必在其属性前加上 data.
:
<div x-data="data">
<button @click="foo.doSomething()">Call doSomething()</button>
</div>
回答您的第二个问题:由于您有一个应用于最顶层元素 (body
) 的“全局”组件,因此每个子组件都可以访问该父组件的属性。所以在 SomeButton
"bind-object" 类型的组件中,我们可以使用 this.
前缀在组件的定义中访问它们。
window.Alpine.bind('SomeButton', () => ({
'@click'() {
if (this.foo.status === 'open') {
this.bar.doSomething()
}
}
})
这里我们将逻辑附加到 click-event:如果状态为 'open',我们调用 bar.doSomething()
。
<div x-data="data">
<button x-bind="SomeButton">Call bar.doSomething() if status is 'open'</button>
</div>