如何在导入时将值传递给 init 方法?

How can I pass a value to init methods on import?

假设我有这样的组件:

'use strict';

export default () => ({
    selected: false,
    init(selectedIndex: -1)
    {

    }

});

我这样导入它(使用 AlpineJS 3):

import Alpine from 'alpinejs'

window.Alpine = Alpine

window.Components = {};

import Tab from "./components/Tab";
window.Components.Tab = Tab;

Alpine.start();

现在如何将值传递给 init 方法?

当我有:

<div x-data="Components.Tab(0)">...</div>

值显然没有传递给 init 方法。

虽然文档中有如何register component from a bundle and info how to pass initial parameters的信息,但没有关于如何将初始参数传递给从包中注册的组件的信息

如您在 the documentation of the init function 中所见:

If your component contains an init() method

您不能向 init() 方法添加参数(注意两个括号表示没有参数)。

必须将参数添加到组件本身。所以你的组件定义应该是:

'use strict';

export default (initialSelected = -1) => ({
    selected: initialSelected,
    init()
    {

    }

});

顺便说一句,我注意到您的 selected 字段是布尔值,而您的 selectedIndex 参数是数字。在我上面更正的代码中,我只是对两者都使用了数字。

此外,您在代码中使用了它:

window.Components.Tab = Tab;

但是 the documentation you have linked to 说您需要使用 Alpine.data('Tab', Tab) 从捆绑包中注册。