angular路由跳转,并获取参数问题

本文介绍如何在Angular项目中配置路由以及如何在组件间通过路由传递参数,并展示了具体的实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、新增app.routes.ts(代码如下:)

import {Routes, RouterModule} from '@angular/router';
import {NgModule} from "@angular/core";
// 引入要用的组件
import{LoginPage} from "../pages/login/login";
import{SettingPage} from "../pages/setting/setting";
import{UserPage} from "../pages/user/user";
import{TabsPage} from "../pages/tabs/tabs";

// Routes配置:保存着哪个url对应着展示哪个组件,以及在哪个RouterOutlet中展示组件
const routes: Routes = [
  /* 在path里不要用“/”来区分根目录还是子目录,且path为自定义名字,一般建议与组件名相同;
   在空路径下,会跳转到HomeComponent
   */
  /* {
   path: '',
   component: LoginPage
   },*/
  {
    path: 'login/:id',
    component: LoginPage
  },
  {
    path: 'user',
    component: UserPage
  },
  {
    path: 'tabs',
    component: TabsPage
  },
  {
    path: 'setting',
    component: SettingPage
  },
  // 重定向
  {
    path: '**',
    pathMatch: 'full',
    redirectTo: ''
  }
];
// 将路由配置导出为 appRouting 以供调用, 子模块中的路由使用 forChild 而不是 forRoot
export const AppRoutes = RouterModule.forRoot(routes);



2、在login.ts中接收id的值

import {Component, OnInit} from '@angular/core';
import {IonicPage, ModalController} from 'ionic-angular';
import {TabsPage} from "../tabs/tabs";
import  {LoginService} from  './login.service';
import {ActivatedRoute, Params} from '@angular/router';
import {Location}     from '@angular/common';
import 'rxjs/add/operator/switchMap';

@IonicPage()
@Component({
  selector: 'page-login',
  templateUrl: 'login.html',
  providers: [LoginService]
})
export class LoginPage implements OnInit {

  private username: string;
  private userpass: string;
  private id: number;

  constructor(public modalCtrl: ModalController, public  loginService: LoginService, public route: ActivatedRoute,
              public location: Location) {
    // http.post()
  }

  ngOnInit() {
    // let id = this.route.params.subscribe(data=>console.log(data.id));
    this.route.params.subscribe((data) => this.id = data.id);
    console.log("路由中传过来的id是:" + this.id);
  }

  back() {
    console.log("点击了返回按钮!")
    this.location.back();
  }

  ionViewDidLoad() {
    console.log('ionViewDidLoad LoginPage');
  }

  /**
   * 登录
   */
  userLogin(username: HTMLInputElement, password: HTMLInputElement, toggle) {

    this.username = username.value;
    this.userpass = password.value;
    this.loginService
      .login(this.username, this.userpass)
      .then(result => {
        console.log("登录接口返回的信息是:" + result);//打印返回的数据
        if (result.code == 200 && result.data) { // 登录成功
          // 在这里做判断,路由跳转
          let modal = this.modalCtrl.create(TabsPage);
          modal.present();
        } else { // 登录失败
          alert(result.message);
        }
      });
  }


  /*userLogin(username: HTMLInputElement, password: HTMLInputElement, toggle) {
   console.log("是否记住密码:" + toggle.value);
   if (username.value.length <= 0) {
   alert("请输入用户名");
   return false;
   }
   if (password.value.length <= 0) {
   alert("请输入密码");
   return false;
   }
   if (username.value == 'zxd' && password.value == '123') {
   alert("登录成功!");
   let userinfo: string = "用户账户是:" + username.value + "用户密码是:" + password.value;
   console.log(userinfo);
   // 发生登录请求


   // 跳转页面
   let modal = this.modalCtrl.create(TabsPage);
   modal.present();
   } else {
   alert("账户或者密码不正确!");
   }
   }*/
}


Angular中实现带参数路由跳转主要分为两种情况:一种是通过路径参数(Path Parameters),另一种是通过查询参数(Query Parameters)。以下是详细的实现方法和示例代码。 --- ### 一、使用路径参数(Path Parameters) #### 1. 配置路由 定义带有占位符的路由路径,用于接收动态参数[^4]。 ```typescript const routes: Routes = [ { path: 'hero/:id', component: HeroDetailComponent }, // :id 是路径参数占位符 ]; ``` #### 2. 跳转到目标路由 利用`Router.navigate`方法进行跳转传递路径参数。 ```typescript import { Router } from '@angular/router'; constructor(private router: Router) {} navigateToHero(id: string): void { this.router.navigate(['/hero', id]); // 参数作为数组的一部分传递 } ``` #### 3. 在目标组件中读取路径参数 通过`ActivatedRoute`服务获取路径参数。 ```typescript import { ActivatedRoute } from '@angular/router'; constructor(private route: ActivatedRoute) {} ngOnInit(): void { this.route.paramMap.subscribe(params => { const heroId = params.get('id'); // 获取路径参数 id 的值 console.log(`英雄ID: ${heroId}`); }); } ``` --- ### 二、使用查询参数(Query Parameters) #### 1. 配置路由 无需特殊配置,任何路由都可以接受查询参数。 #### 2. 带查询参数跳转 同样使用`Router.navigate`方法,但需额外指定`queryParams`选项。 ```typescript this.router.navigate( ['/search'], { queryParams: { category: 'electronics', sort: 'asc' } } // 查询参数对象 ); ``` #### 3. 在目标组件中读取查询参数 通过`ActivatedRoute`的`queryParams`属性订阅查询参数的变化。 ```typescript this.route.queryParamMap.subscribe(paramMap => { const category = paramMap.get('category'); // 获取 category 查询参数 const sort = paramMap.get('sort'); // 获取 sort 查询参数 console.log(`分类: ${category}, 排序方式: ${sort}`); }); ``` --- ### 三、注意事项 - **路径参数 vs 查询参数** - 路径参数通常用于唯一标识资源(如 `/hero/123` 表示第123号英雄)[^4]。 - 查询参数适合携带附加信息(如分页、筛选条件等)。 - **导航失败处理** 如果目标路由不存在或参数不合法,可以捕获错误提供友好的提示。 - **性能优化** 使用`paramMap`和`queryParamMap`时应考虑解绑订阅以防内存泄漏。 --- ### 示例总结 以下是一个完整的例子,展示如何结合路径参数和查询参数进行路由跳转: ```typescript // 导航逻辑 this.router.navigate(['/product', productId], { queryParams: { color: 'red', size: 'M' } }); // 目标组件中读取参数 ngOnInit(): void { this.route.paramMap.subscribe(params => { const productId = params.get('productId'); console.log(`产品ID: ${productId}`); }); this.route.queryParamMap.subscribe(queryParams => { const color = queryParams.get('color'); const size = queryParams.get('size'); console.log(`颜色: ${color}, 尺寸: ${size}`); }); } ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值