路由到角度特定路由时如何删除查询参数?

时间:2019-01-22 11:28:14

标签: angular angular-router

AFAIK,要删除成角度的查询参数,我们需要执行以下操作:

defmodule TestModule do
    def build_tree(levels, parent_id \\ nil) do
        levels
        |> Enum.filter(& &1.parent_id == parent_id) # get children of parent_id
        |> Enum.map(fn level ->
            %{level | children: build_tree(levels, level.id)} # recursively build subtrees of current level
        end)
        # we should now have child nodes of parent_id with their children populated
    end
end

# sample input
levels = [
    %{id: 1, parent_id: nil, children: []},
    %{id: 2, parent_id: 1, children: []},
    %{id: 3, parent_id: 2, children: []},
    %{id: 4, parent_id: 2, children: []},
    %{id: 5, parent_id: 4, children: []},
    %{id: 6, parent_id: 1, children: []},
    %{id: 7, parent_id: 6, children: []},
    %{id: 8, parent_id: 6, children: []},
    %{id: 9, parent_id: nil, children: []},
    %{id: 10, parent_id: 9, children: []},
]

TestModule.build_tree(levels)

但是,当尝试添加路由保护器,解析器或正在添加到路由模块的任何东西时,该方法不起作用,因为这会先路由到当前路由,再路由到目标。

我之所以不尝试通过订阅router.events或在路由组件的ngOnInit上添加此逻辑,是因为首先,通过在router.events上进行订阅,所有路由更改都将得到因此很难在启动目标组件时仅“仅”删除查询参数,其次,在ngOnInit上应用逻辑将可以正常工作,但是这里的问题是很难重用代码,因为该代码仅删除特定的查询参数/ s。

这就是为什么我试图创建一个保护器/解析器,该保护器/分解器可以在多个路径上重用,并且只能在组件启动之前/之内完成。

谢谢!

0 个答案:

没有答案