NgRx复合选择器

时间:2018-07-29 12:23:01

标签: typescript ngrx

是否可以在NgRx中创建复合选择器?

示例:

export const paramSelector = (id) => createSelector(
  someState,
  state => state[id]
);

export const selectedId = createSelector(
  someOtherState,
  state => state.id
);

export const compoundSelector = createSelector(
  selectedId,
  id => paramSelector(id),
  state => state
);

显然以上代码无法正常工作。有什么方法可以得到期望的结果(最后一个片段)?


这个想法是要有专门的参数化选择器,以及一些使用它们的高级选择器。想象paramSelector更复杂。有时您想将paramSelector与特定参数一起使用。有时候,您不想自己提供参数,而是想从商店中获取参数(例如,路由器状态)。

现在,您永远不需要重复相同的代码,因此需要一个复合选择器。


编辑

功能请求已创建。可以找到here

1 个答案:

答案 0 :(得分:0)

您的第一个代码段应该可以工作,第二个代码段不能工作-有关更多信息,请参考NgRx: Parameterized selectors

例如:

<ul>
    {% for book_type in book_types %}
    <li>
        <!-- you have to handle the logic of the url here -->
        <a href="{% url 'my_url' book_type.0 %}">{{ book_type.1 }}</a>
    </li>
    {% endfor %}
</ul>

在下一个版本中,有可能向选择器添加额外的道具,如:

url(r'^my_url/(?P<book_type_id>\d+)/$', my_view, name='my_url'),