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)"> </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"><<span class="typ">Crisis<span class="pun">><span class="pln"> <span class="pun">|<span class="pln"> <span class="typ">Observable<span class="str"><never><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) => {<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"><<span class="typ">UrlSegment<span class="pun">[]></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"><<span class="typ">Params<span class="pun">></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"><<span class="typ">Params<span class="pun">></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"><<span class="pln">string<span class="pun">></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"><<span class="typ">Data<span class="pun">></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"><<span class="pln">any<span class="pun">><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"><<span class="typ">ParamMap<span class="pun">></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"><<span class="typ">ParamMap<span class="pun">></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> </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> </p>
</li>
</ul>
</div>
<div id="MySignature" role="contentinfo">
每天一点点<br><br>
来源:https://www.cnblogs.com/juliazhang/p/12769334.html
頁:
[1]