田雪龙 發表於 2020-4-24 18:34:00

Angular ActivatedRoute

<p>Angular ActivatedRoute里面有几个比较容易混淆的属性</p>
<ul>
<li>queryParams</li>
<li>queryParamMap</li>
<li>params</li>
<li>paramMap
<div class="cnblogs_code">
<pre><strong>queryParams 和 params 都是angular里面的旧属性</strong>。据官网描述,虽然现在仍然可以使用,但可能以后就会被弃用掉,所以建议使用相对应的新的属性名称</pre>
<div class="cnblogs_code">
<pre>Two older properties are still available, however, their replacements are preferable <span style="color: rgba(0, 0, 255, 1)">as</span> they may be deprecated <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> a future Angular version.

</span><span style="color: rgba(0, 0, 255, 1); background-color: rgba(255, 255, 0, 1)">params</span><span style="color: rgba(0, 0, 0, 1)">: An Observable that contains the required and optional parameters specific to the route. Use <span style="background-color: rgba(255, 255, 0, 1)">paramMap</span> instead.

<span style="background-color: rgba(255, 255, 0, 1)">queryParams</span>: An Observable that contains the query parameters available to all routes. Use <span style="background-color: rgba(255, 255, 0, 1)">queryParamMap</span> instead.</span></pre>
</div>
<p><strong>那 queryParamMap 和 paramMap有什么区别呢?</strong></p>
<div class="cnblogs_code">
<pre>简单来讲, queryParamMap获取的是activatedRoute 路由中?后面的参数, 比如: user/:id   这里的id;而paramMap获取的是路由配置中占位符所代表的参数, 比如:user/:id?tab=<span style="color: rgba(0, 0, 0, 1)">edit这里的tab。

当然, queryParamMap还能获取NavigationExtras里面设置的参数, 比如:

    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Set our navigation extras object
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> that contains our global query params and fragment</span>
    let navigationExtras: NavigationExtras =<span style="color: rgba(0, 0, 0, 1)"> {
      <span style="background-color: rgba(255, 255, 0, 1)">queryParams</span>: { </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">session_id</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">: sessionId },
      fragment: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">anchor</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
    };<br><span class="kwd">   this<span class="pun">.<span class="pln">router<span class="pun">.<span class="pln">navigate<span class="pun">([<span class="str">'/login'<span class="pun">],<span class="pln"> navigationExtras<span class="pun">);</span></span></span></span></span></span></span></span></span></span><br></span></pre>
</div>
<pre><span style="color: rgba(0, 0, 255, 1)">&nbsp;</span></pre>
</div>
</li>
<li>ActivatedRoute</li>
<li>ActivatedRouteSnapshot</li>
</ul>
<div class="cnblogs_code">
<pre>1. Snapshot英文原意是 快照 的意思, 因此 ActivatedRouteSnapshot指的是ActivatedRoute中一个永恒不变的状态。它是在组建初始化时的一个路由快照。如果我们只想要获取该组件初始化时路由的信息,<br>那么我们就使用ActivatedRouteSnapshot. 它会忽略组件初始化之后路由的所有更新状态。而ActivatedRoute获取的是组件当前路由的信息。<br>2. ActivatedRouteSnapshot它存储的信息是普通的值, 而ActivatedRoute它的信息是放在一个Observable里面的,因此在使用时需要subscribe,同时使用完成后需要unsubscribe. 比如:</pre>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span> ActivatedRouteSnapshot
<span class="pln"> resolve<span class="pun">(<span class="pln">route<span class="pun">:<span class="pln"> <span class="typ">ActivatedRouteSnapshot</span><span class="pun">,<span class="pln"> <span class="pln">state</span><span class="pun">:<span class="pln"> <span class="typ">RouterStateSnapshot</span><span class="pun">):<span class="pln"> <span class="typ">Observable<span class="pun">&lt;<span class="typ">Crisis<span class="pun">&gt;<span class="pln"> <span class="pun">|<span class="pln"> <span class="typ">Observable<span class="str">&lt;never&gt;<span class="pln"> <span class="pun">{<span class="pln"> <br>  <span class="kwd"><span style="background-color: rgba(255, 255, 0, 1)">let</span><span class="pln"><span style="background-color: rgba(255, 255, 0, 1)"> id </span><span class="pun"><span style="background-color: rgba(255, 255, 0, 1)">=</span><span class="pln"><span style="background-color: rgba(255, 255, 0, 1)"> route</span><span class="pun"><span style="background-color: rgba(255, 255, 0, 1)">.</span><span class="pln"><span style="background-color: rgba(255, 255, 0, 1)">paramMap</span><span class="pun"><span style="background-color: rgba(255, 255, 0, 1)">.</span><span class="kwd"><span style="background-color: rgba(255, 255, 0, 1)">get</span><span class="pun"><span style="background-color: rgba(255, 255, 0, 1)">(</span><span class="str"><span style="background-color: rgba(255, 255, 0, 1)">'id'</span><span class="pun"><span style="background-color: rgba(255, 255, 0, 1)">);</span><br>  ......<br></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>}<br><br>// ActivatedRoute<br>this.routeSub = <span style="background-color: rgba(255, 255, 0, 1)">this.route.paramMap.subscribe</span>((params) =&gt; {<br>  id = params['id'];<br>});</pre>
</div>
<pre>可参考下面的文档了解详情<br>https://www.geekboots.com/story/difference-between-activatedroute-and-activatedroutesnapshot-in-angular<br><br></pre>
</div>
<ul>
<li>ActivatedRoute.snapshot
<div class="cnblogs_code">
<pre>@Component({templateUrl:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">./my-component.html</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">})
</span><span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> MyComponent {
constructor(route: ActivatedRoute) {
    </span><span style="color: rgba(0, 0, 255, 1)">const</span> id: <span style="color: rgba(0, 0, 255, 1)">string</span> = <span style="background-color: rgba(255, 255, 0, 1)">route.snapshot</span>.<span style="color: rgba(0, 0, 255, 1)">params</span><span style="color: rgba(0, 0, 0, 1)">.id;// <span style="background-color: rgba(255, 255, 0, 1)">route.snapshot其实就是 ActivatedRouteSnapshot类型
    </span></span><span style="color: rgba(0, 0, 255, 1)">const</span> url: <span style="color: rgba(0, 0, 255, 1)">string</span> = route.snapshot.url.join(<span style="color: rgba(128, 0, 0, 1)">''</span><span style="color: rgba(0, 0, 0, 1)">);
    </span><span style="color: rgba(0, 0, 255, 1)">const</span> user =<span style="color: rgba(0, 0, 0, 1)"> route.snapshot.data.user;
}
}<br><br><br>参考:<br><span class="kwd">interface<span class="pln"> <span class="typ">ActivatedRoute</span><span class="pln"> <span class="pun">{<span class="pln"> <br><span class="member-name"><span class="pln">snapshot<span class="pun">:<span class="pln"> <span class="typ">ActivatedRouteSnapshot</span></span></span></span></span><span class="pln"> <br><span class="member-name"><span class="pln">url<span class="pun">:<span class="pln"> <span class="typ">Observable<span class="pun">&lt;<span class="typ">UrlSegment<span class="pun">[]&gt;</span></span></span></span></span></span></span></span><span class="pln"> <br><span class="member-name"><span class="pln">params<span class="pun">:<span class="pln"> <span class="typ">Observable<span class="pun">&lt;<span class="typ">Params<span class="pun">&gt;</span></span></span></span></span></span></span></span><span class="pln"> <br><span class="member-name"><span class="pln">queryParams<span class="pun">:<span class="pln"> <span class="typ">Observable<span class="pun">&lt;<span class="typ">Params<span class="pun">&gt;</span></span></span></span></span></span></span></span><span class="pln"> <br><span class="member-name"><span class="pln">fragment<span class="pun">:<span class="pln"> <span class="typ">Observable<span class="pun">&lt;<span class="pln">string<span class="pun">&gt;</span></span></span></span></span></span></span></span><span class="pln"> <br><span class="member-name"><span class="pln">data<span class="pun">:<span class="pln"> <span class="typ">Observable<span class="pun">&lt;<span class="typ">Data<span class="pun">&gt;</span></span></span></span></span></span></span></span><span class="pln"> <br><span class="member-name"><span class="pln">outlet<span class="pun">:<span class="pln"> string</span></span></span></span><span class="pln"> <br><span class="member-name"><span class="pln">component<span class="pun">:<span class="pln"> <span class="typ">Type<span class="pun">&lt;<span class="pln">any<span class="pun">&gt;<span class="pln"> <span class="pun">|<span class="pln"> string <span class="pun">|<span class="pln"> <span class="kwd">null</span></span></span></span></span></span></span></span></span></span></span></span></span></span><span class="pln"> <br><span class="member-name"><span class="pln">routeConfig<span class="pun">:<span class="pln"> <span class="typ">Route<span class="pln"> <span class="pun">|<span class="pln"> <span class="kwd">null</span></span></span></span></span></span></span></span></span><span class="pln"> <br><span class="member-name"><span class="pln">root<span class="pun">:<span class="pln"> <span class="typ">ActivatedRoute</span></span></span></span></span><span class="pln"> <br><span class="member-name"><span class="pln">parent<span class="pun">:<span class="pln"> <span class="typ">ActivatedRoute<span class="pln"> <span class="pun">|<span class="pln"> <span class="kwd">null</span></span></span></span></span></span></span></span></span><span class="pln"> <br><span class="member-name"><span class="pln">firstChild<span class="pun">:<span class="pln"> <span class="typ">ActivatedRoute<span class="pln"> <span class="pun">|<span class="pln"> <span class="kwd">null</span></span></span></span></span></span></span></span></span><span class="pln"> <br><span class="member-name"><span class="pln">children<span class="pun">:<span class="pln"> <span class="typ">ActivatedRoute<span class="pun">[]</span></span></span></span></span></span><span class="pln"> <br><span class="member-name"><span class="pln">pathFromRoot<span class="pun">:<span class="pln"> <span class="typ">ActivatedRoute<span class="pun">[]</span></span></span></span></span></span><span class="pln"> <br><span class="member-name"><span class="pln">paramMap<span class="pun">:<span class="pln"> <span class="typ">Observable<span class="pun">&lt;<span class="typ">ParamMap<span class="pun">&gt;</span></span></span></span></span></span></span></span><span class="pln"> <br><span class="member-name"><span class="pln">queryParamMap<span class="pun">:<span class="pln"> <span class="typ">Observable<span class="pun">&lt;<span class="typ">ParamMap<span class="pun">&gt;</span></span></span></span></span></span></span></span><span class="pln"> <br><span class="member-name"><span class="pln">toString<span class="pun">():<span class="pln"> string</span></span></span></span><span class="pln"> <br><span class="pun">}</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><br></span></pre>
</div>
<p>  </p>
</li>
<li>Router
<div class="cnblogs_code">
<pre>Router : A service that provides navigation and URL manipulation capabilities.</pre>
</div>
<p>&nbsp;</p>
</li>
<li>queryParam</li>
<li>fragment
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">queryParam指的是当路由使用HTML5 pushState 风格时,用来获取?后者</span>navigationExtras里面queryParams设置的参数<br><span><span class="com">// Navigate to /results?page=1<span class="pln"> <span class="kwd">this<span class="pun">.<span class="pln">router<span class="pun">.<span class="pln">navigate<span class="pun">([<span class="str">'/results'<span class="pun">],<span class="pln"> <span class="pun">{<span class="pln"> queryParams<span class="pun">:<span class="pln"> <span class="pun">{<span class="pln"> page<span class="pun">:<span class="pln"> <span class="lit">1<span class="pln"> <span class="pun">}<span class="pln"> <span class="pun">});</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></pre>
<pre><span style="color: rgba(0, 0, 0, 1)">
而 fragment指的是当路由使用hash URL 策略时,用来获取#后面,或者 navigationExtras里面</span>fragment<span>设置的参数<br></span><span><span class="com">// Navigate to /results#top<span class="pln"> <span class="kwd">this<span class="pun">.<span class="pln">router<span class="pun">.<span class="pln">navigate<span class="pun">([<span class="str">'/results'<span class="pun">],<span class="pln"> <span class="pun">{<span class="pln"> fragment<span class="pun">:<span class="pln"> <span class="str">'top'<span class="pln"> <span class="pun">});</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></pre>
</div>
<p>&nbsp;</p>
</li>
</ul>

</div>
<div id="MySignature" role="contentinfo">
    每天一点点<br><br>
来源:https://www.cnblogs.com/juliazhang/p/12769334.html
頁: [1]
查看完整版本: Angular ActivatedRoute