问题标签 [aurelia-store]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
344 浏览

aurelia - 在 Aurelia Store 的配置管道步骤中使用 @connectTo 装饰器时,状态始终未定义

我有一个使用Aurelia Store的 Aurelia 应用程序。@connectTo在 Aurelia 管道步骤中使用装饰器时遇到了一些麻烦。

我已将以下步骤添加到我的配置管道中:

这一步看起来像:

但是,我的状态始终未定义。查看我项目的其他部分,我可以看到状态和用户正在被填充,但它似乎在这AuthorizeStep似乎不起作用。

我认为这个问题可能是由于我AuthorizeStep没有bind生命周期方法,但如果是这样,我该怎么办?

0 投票
1 回答
722 浏览

aurelia - 如何观察/订阅 Aurelia Store 中的状态变化?

我有一个selectedOption关于我的 Aurelia 商店状态的属性,可以通过操作进行更改。我想观察/订阅状态上此属性的任何更改。我的问题是订阅BindingEngine不起作用,因为每次更改状态时,都会创建状态的新副本,因此订阅不再起作用。

这是我的例子:

第一次,我的订阅会起作用,控制台会记录“发生了一些变化!” 因为状态是同一个对象,但之后它将不起作用。

我可以使用的另一个解决方案是拥有一个像这样的计算属性:

这是一个 hack,这个计算永远不会被触发,因为它没有绑定到 HTML 中的任何内容。

对于上下文,我想在每次selectedOption属性更改时触发服务器调用。

我可以做些什么来接收来自该州的财产的所有更新?

0 投票
1 回答
648 浏览

aurelia - Aurelia 应用程序中的值更改时未触发事件

我有一个 Aurelia 应用程序使用Store来管理组件之间的状态。

在我的下拉组件中,我有验证(不是框架验证,只是应该在 ViewModel 更改时调用的代码),当值更改时应该触发:

在 ViewModel 中,验证的工作方式如下:

参数模型如下所示:

Parameter父组件向下传递给该组件,其中值可以在使用 Store 管理的状态对象上更改。

当调用以下操作以更改State对象上的值时,该值可能会更改:

当状态对象上的参数值更改时,下拉菜单在屏幕上明显更改,但parameterChanged()valueChanged()不触发。

有谁知道这里发生了什么以及我可以尝试解决的任何问题?任何帮助表示赞赏...

0 投票
1 回答
679 浏览

aurelia - Aurelia 商店 - 'Observable<{}>' 类型上不存在属性 'pluck'

我有一个 Aurelia CLI (0.33) 应用程序(Webpack 4,Typescript)并使用 aurelia-store。

main.ts 包括

我的状态.ts

我的视图类:

如果我不使用 PLUCK(仅限@connectTo()),我可以在我的视图中使用 store.meals 并且一切正常,但是当我尝试使用 pluck 时,我在编译器中收到错误消息“TS2339: Property 'pluck ' 类型 'Observable<{}>' 上不存在。

我已经尝试过: - 删除 node_modules - yarn install - npm install

并且错误仍然存​​在。

包.json

有什么想法可能是错的吗?

0 投票
1 回答
1279 浏览

typescript - 如何从 Aurelia Store 订阅方法导入 Typescript 订阅类型?

我正在关注Aurelia Store的文档,了解如何订阅商店更改流。当我从中导入打字稿Subscription类型时,rxjs我收到打字稿编译错误: TS2322: Type 'import("project\node_modules\aurelia-store\node_modules\rxjs\internal\Subscription") is not assignable to type import("project\node_modules\rxjs\internal\Subscription")

代码示例:

我试过这样做import { Store, Subscription } from 'aurelia-store',但这也不起作用。

编辑:

回答 Pierre-Luc Champigny 的问题:

您的 rxjs 版本(来自 Aurelia 和您安装的 rxjs)是否相同?

因此,aurelia-store/package.json 的 rxjs 版本为“^6.2.2”,而我的项目 package.json 为“6.3.2”。所以,我卸载了我的 rxjs 版本并安装了 6.2.2 版本。现在打字稿给出了这个错误信息:

TS2322:类型 'import("project/node_modules/aurelia-store/node_modules/rxjs/internal/Subscription").Subscription' 不可分配给类型 'import("project/node_modules/rxjs/internal/Subscription").Subscription' . 属性“_parent”受保护,但类型“订阅”不是从“订阅”派生的类。

0 投票
0 回答
228 浏览

aurelia - 使用 Aurelia Store 在 Actions 中复制状态的最佳方式是什么?

有哪些方法可以在 Action 中深度克隆我的状态?

我见过的可能的解决方案是Immer.jsJSON.parse(JSON.stringify)或者创建一个递归函数来进行深度克隆。我什至在考虑重新创建 Redux 所做的事情并创建Reducer并将它们组合到我的整个状态中,但我决定反对它是有原因的。我喜欢在 Aurelia 商店中如何将操作推送到商店,在每个自定义元素的 bind() 方法中。我相信这是一种更好的方式,因为它促进了高内聚和低耦合。而在 Redux 中,我所有的 Actions 和 Reducers 都集中在 store 中。

我从未使用过 Immer.js,我想知道使用它有哪些优点和缺点?

我喜欢使用的想法,JSON.parse(JSON.stringify)因为它确保我的状态在任何时候都是可序列化的。如果我想将我的状态保存到某种类型的存储中,这将是一件好事。它使我能够尽早发现问题,例如当我尝试使用 Set 和 Map 对象类型时,我很快发现那些不使用上述方法进行序列化/反序列化。但是我想知道如果我的商店变得太大会JSON.parse(JSON.stringify)变得太慢吗?

然后可以选择只创建一个复制我的状态的递归函数。有没有人试过这个?

谢谢

编辑 - 2018 年 9 月 26 日, 我还在 aurelia discourse 论坛上提出了这个问题,并在那里收到了一些有用的回复。 https://discourse.aurelia.io/t/using-aurelia-store-what-is-the-best-way-to-copy-your-state-within-actions/

0 投票
1 回答
282 浏览

action - Aurelia 在一个动作中改变状态两次

我正在使用 aurelia 开发并使用 aurelia-store 进行应用程序状态管理。在从服务器加载数据时,我想更改 isLoading 字段 true/false 以在相关组件上显示掩码。所以我在我的状态下定义了一个属性isLoading(例如)。在加载操作中,我想首先将加载状态更改为 true,然后将数据检索到 false。因此,根据该字段(isLoading)的值,我想在组件上显示掩码。

我想要这样的东西:

但正如我从 aurelia 文档中得出的那样,一个动作中不允许进行两种状态更改。

我应该怎么办?

我有一个想法,首先在这个动作中调度另一个动作,使 isLoading 为真,然后完成这项工作。像这样的东西:

但是我找不到一些关于如何在一个动作中调度另一个动作的文档。

有哪些可能的解决方案?

0 投票
2 回答
114 浏览

aurelia - Aurelia 商店 - 状态正在改变的 UI 指示器

我正在尝试重构 Aurelia 应用程序以使用 Aurelia Store 插件,而不是注入到我的所有视图模型类的单例类。在我当前的应用程序中,有一堆服务类可以进行 ajax 调用以从 web api 获取数据。在调用时使用承诺链很容易在加载内容时暂停 UI,例如

现在我已经将 API 调用移到了我的商店操作中,我如何在我的 UI 中表示这种加载?

为基本问题道歉。任何帮助深表感谢。

0 投票
1 回答
198 浏览

aurelia - Aurelia store connectTo 从不设置目标属性

我按照文档设置了 aurelia-store;在所有插件底部的 main.ts 中(来自带有 dotnet 核心的骨架应用程序),我定义了最后一个插件:

然后我的应用程序需要登录用户并保存他们的不记名令牌。

在登录类中,我尝试使用 @connectTo 装饰器。但是它从不设置依赖属性。所以我在应用程序一开始就被困在这个简单的部分,我的工作已经建议不要使用 Aurelia,但我说我想要快速 POC。

我已经完全复制了文档,但仍然存在问题。值得注意的是,我必须在 tsconfig 中关闭 strictNullCheck 才能解析 doc 代码。

登录.ts

我希望 this.state 属性具有从全局状态存储中填充的具有初始状态值的状态对象。例如

我只需要在登录中设置 userToken 并在 app.js 中检索它。这是不可能的; 使这个基本功能真正起作用可能缺少什么?

0 投票
0 回答
207 浏览

javascript - 访问嵌套对象返回空数组

我正在从 api 检索数据并将其存储在 sharedState 中。当我尝试像下面这样访问这些数据时,它似乎返回了正确的。dashboard数组中有一个带有name字段的对象。

返回:

在此处输入图像描述

但是,当我访问dashboards

它返回

从 main.js 设置状态的函数

我不确定这是 javascript 行为还是与我设置状态的方式有关。