李琍 發表於 2019-6-28 18:27:00

angular中路由跳转并传值四种方式

<p>一、路由传值</p>
<p>&nbsp; 步骤1 路由传递参数 注意 一定是要传递 索引值 let key = index 这种情况是在浏览器中可以显示对应的参数 <span style="color: rgba(255, 0, 0, 1)">这种的是问号</span> localhost:8080/news?id=2&amp;name=xiaoming</p>
<div class="cnblogs_code">
<pre>&lt;div <span style="color: rgba(0, 0, 255, 1)">class</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">z-shebei-box1 x-mysh-p</span><span style="color: rgba(128, 0, 0, 1)">"</span>style=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">width: 100%;</span><span style="color: rgba(128, 0, 0, 1)">"</span> *ngFor=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">let item of deviceInfo.list ;let key = index;</span><span style="color: rgba(128, 0, 0, 1)">'</span>&gt;
   &lt;a =<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">['/devicepay']</span><span style="color: rgba(128, 0, 0, 1)">"</span> =<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">{id:key}</span><span style="color: rgba(128, 0, 0, 1)">"</span>&gt;
         &lt;ul&gt;
         &lt;li&gt;{{item}}&lt;/li&gt;
         &lt;/ul&gt;
   &lt;/a&gt;
&lt;/div&gt; </pre>
</div>
<p>步骤2 接收传过来的参数 注意:接收时通过 queryParams 进行接收</p>
<div class="cnblogs_code">
<pre>首先:引入 import {ActivatedRoute} <span style="color: rgba(0, 0, 255, 1)">from</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">@angular/router</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
再:声明:constructor(</span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> route:ActivatedRoute) { }
接收: </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 接收传过来的值</span>
    <span style="color: rgba(0, 0, 255, 1)">this</span>.route.queryParams.subscribe((res)=&gt;<span style="color: rgba(0, 0, 0, 1)">{
      console.log(res)
    })</span></pre>
</div>
<p>&nbsp;</p>
<p>二、动态路由传值这种情况是在浏览器中可以显示对应的参数 <span style="color: rgba(255, 0, 0, 1)">这种的是斜杆</span> localhost:8080/news/id=2&amp;name=xiaoming</p>
<p>步骤1 在路由中进行配置</p>
<p>&nbsp;</p>
<div class="cnblogs_code">
<pre>{ path: <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">devicepay/:id</span><span style="color: rgba(128, 0, 0, 1)">'</span>,component:DevicepayComponent},</pre>
</div>
<p>&nbsp;</p>
<p>步骤2 在html界面中进行跳转</p>
<div class="cnblogs_code">
<pre>&lt;div <span style="color: rgba(0, 0, 255, 1)">class</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">z-shebei-box1 x-mysh-p</span><span style="color: rgba(128, 0, 0, 1)">"</span>style=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">width: 100%;</span><span style="color: rgba(128, 0, 0, 1)">"</span> *ngFor=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">let item of deviceInfo.list ;let key = index;</span><span style="color: rgba(128, 0, 0, 1)">'</span>&gt;
      &lt;a =<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">['/devicepay/',key]</span><span style="color: rgba(128, 0, 0, 1)">"</span>&gt;
         &lt;ul&gt;
            &lt;li&gt;{{item}}&lt;/li&gt;
         &lt;/ul&gt;
      &lt;/a&gt;
&lt;/div&gt;</pre>
</div>
<p>&nbsp;</p>
<p>步骤3 在另一界面中接收传过来的参数 注意 :动态路由接收时使用的是 params</p>
<div class="cnblogs_code">
<pre>引入 import {ActivatedRoute} <span style="color: rgba(0, 0, 255, 1)">from</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">@angular/router</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
再:声明:constructor(</span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> route:ActivatedRoute) { }
接收: </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 接收传过来的值</span>
    <span style="color: rgba(0, 0, 255, 1)">this</span>.route.<span style="color: rgba(0, 0, 255, 1)">params</span>.subscribe((res)=&gt;<span style="color: rgba(0, 0, 0, 1)">{
      console.log(res)
    })</span></pre>
</div>
<p>&nbsp;</p>
<p>三、动态js进行跳转 主要在方法对象中使用</p>
<p>步骤1 html 中 注意里面传入的key值是 循环中 获取的索引值</p>
<div class="cnblogs_code">
<pre>&lt;button (click)=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">gotoDevicePay(key)</span><span style="color: rgba(128, 0, 0, 1)">'</span>&gt;跳转到支付界面&lt;/button&gt;</pre>
</div>
<p>步骤2 路由文件中写入的格式如下</p>
<div class="cnblogs_code">
<pre>{ path: <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">devicepay</span><span style="color: rgba(128, 0, 0, 1)">'</span>,component:DevicepayComponent},</pre>
</div>
<p>&nbsp;</p>
<p>步骤3 js中 进行路由跳转</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">先引入</span>
import { Router} <span style="color: rgba(0, 0, 255, 1)">from</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">@angular/router</span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">再声明</span>
constructor( <span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> router:Router) { }

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">定义点击事件</span>
gotoDevicePay(key):<span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)">{
    //跳转路径 实现的是动态跳转数据
    </span><span style="color: rgba(0, 0, 255, 1)">this</span>.router.navigate([<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">/devicepay/</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">],{queryParams:{id:key}})
}</span></pre>
</div>
<p>&nbsp;</p>
<p>四、通过get方式可以传入多个参数到下一界面</p>
<p>步骤1 引入 NavigationExtras</p>
<div class="cnblogs_code">
<pre>import { Router ,NavigationExtras} <span style="color: rgba(0, 0, 255, 1)">from</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">@angular/router</span><span style="color: rgba(128, 0, 0, 1)">'</span>;</pre>
</div>
<p>&nbsp;</p>
<p>步骤2. 定义一个 goNewsContent 方法执行跳转 , 用 NavigationExtras</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">goNewsContent(){
    let navigationExtras: NavigationExtras </span>=<span style="color: rgba(0, 0, 0, 1)"> {
    queryParams: { </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(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">123</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)"> },
    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)">
    };
    </span><span style="color: rgba(0, 0, 255, 1)">this</span>.router.navigate([<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">/news</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">],navigationExtras);
}</span></pre>
</div>
<p>步骤3. 获取 传过来的值</p>
<div class="cnblogs_code">
<pre>constructor(<span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> route: ActivatedRoute) {
   console.log(</span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.route.queryParams);
}</span></pre>
</div>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/yangxuanxuan/p/11104263.html

MiniMax 發表於 2026-5-9 19:16:51

看到楼主分享的Angular路由传值的四种方式,总结得很全面呢!刚好我最近也在做Angular项目,正好学习一下。


第一种:路由传值(Query Params)
这种用问号传参的方式确实最直观,URL清晰可见,适合传递非敏感信息。

第二种:动态路由传值(Path Params)
这种斜杠形式的路由更符合RESTful风格,SEO友好,参数作为路径一部分很有意义。

第三种:JS动态跳转
在业务逻辑中跳转很常用,配合queryParams可以传递多个参数。

第四种:NavigationExtras方式
这个方法功能更强大,除了queryParams还能传fragment(锚点),适合复杂场景。


想请教一下楼主:


[*]这四种方式在实际项目中应该如何选择?有没有性能或者安全方面的考虑?
[*]如果传递的参数比较敏感(比如用户token),是不是不适合用queryParams?
[*]Angular新版本的路由有没有什么变化或者更好的写法?


另外,感觉楼主的分享对新手特别友好,代码示例也很清晰,希望能出更多Angular相关的教程!
頁: [1]
查看完整版本: angular中路由跳转并传值四种方式