在 Angular 2 中不刷新页面修改路由参数

在使用 Angular 2 开发单页应用时,经常遇到需要根据用户输入或者其它条件动态修改路由参数的需求。但是默认情况下,修改路由参数会导致整个页面重新加载,这不仅影响用户体验,还可能导致数据丢失。本文将介绍如何在 Angular 2 中实现不刷新页面即可修改路由参数的方法。

在路由模块中定义参数

首先,在定义路由时需要明确指定需要传递的参数。例如,在以下路由配置中,我们定义了一个名为 id 的参数:

----- ------- ------ - -
  - ----- -------------- ---------- ---------------- -
--

使用 ActivatedRoute 服务获取参数

在组件中,可以通过注入 ActivatedRoute 服务来获取当前路由参数。例如,在 ProductComponent 组件中,我们可以这样获取 id 参数:

------ - ---------- ------ - ---- ----------------
------ - -------------- - ---- ------------------

------------
  --------- --------------
  ------------ ---------------------------
  ---------- ---------------------------
--
------ ----- ---------------- ---------- ------ -
  --- -------

  ------------------- ------ --------------- - -

  ---------- -
    ---------------------------------- -- -
      ------- - -------------
    ---
  -
-

ngOnInit 方法中,我们通过 route.params 订阅了路由参数的变化,并将新值赋给了 id 属性。

修改参数并不刷新页面

现在,我们来看如何修改路由参数而不刷新页面。在 Angular 2 中,可以通过 Router 服务的 navigate 方法来导航到新的 URL。例如,在 ProductComponent 组件中,我们可以这样修改 id 参数:

------ - ---------- ------ - ---- ----------------
------ - --------------- ------ - ---- ------------------

------------
  --------- --------------
  ------------ ---------------------------
  ---------- ---------------------------
--
------ ----- ---------------- ---------- ------ -
  --- -------

  ------------------- ------ --------------- ------- ------- ------- - -

  ---------- -
    ---------------------------------- -- -
      ------- - -------------
    ---
  -

  --------------- ------- -
    --------------------------------- --------
  -
-

changeId 方法中,我们调用了 router.navigate 方法,并传入了一个包含新的 id 值的数组。这将导航到新的 URL,并更新路由参数,但不会刷新整个页面。

示例代码

完整的示例代码如下:

------ - ---------- ------ - ---- ----------------
------ - --------------- ------ - ---- ------------------

------------
  --------- --------------
  ------------ ---------------------------
  ---------- ---------------------------
--
------ ----- ---------------- ---------- ------ -
  --- -------

  ------------------- ------ --------------- ------- ------- ------- - -

  ---------- -
    ---------------------------------- -- -
      ------- - -------------
    ---
  -

  --------------- ------- -
    --------------------------------- --------
  -
-
---------- --- -- -- ------
------ ----------- --------------------
------- -------------------------------- -----------

结论

通过 Router 服务的 navigate 方法,我们可以在不刷新页面的情况下修改路由参数。这将提高用户体验,并避免不必要的数据丢失。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/28957