a标签带参数跳转页面,并在跳转页面接受参数

本文介绍了如何使用JavaScript中的window.location对象来获取当前页面URL的相关信息,包括协议、主机名、路径等。同时,展示了如何从带参数的a标签中获取并解析跳转链接的参数,例如在other.html中接收并打印出a标签中的id参数。

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

获取网页中url属性使用的是window.location对象

windows.location对象的属性 

属性描述
herf返回的是当前页面的整个url
protocol返回的是url的协议
hostname返回的是主机名(域名)
host返回的是主机名(域名)包含端口号
port返回的是主机端口
pathname返回的当前页面的路径名
search返回的是?后面的部分(包含?)
hash返回锚点(从#号开始)

点击a标签带参数跳转到other.html

<body>
  <a href="./other.html?id=1">跳转</a>
</body>

在other.html中接受a标签中的参数

<body>
  <script>
    // 用=将路由参数分割成数组
    let idArray = window.location.search.split('=');
    console.log(idArray);//[?id,1]
    // 获取路由的参数
    let assetId = idArray[1];
    console.log(assetId);//1
  </script>
</body>

### 关于 Maui MVVM 架构中带参数页面跳转的实现 在 .NET MAUI 的 MVVM 架构下,可以借助 `Shell` 导航服务来实现页面间的跳转通过传递参数到目标页面的 ViewModel 完成数据交互。以下是详细的代码实现和说明。 --- #### 1. 页面跳转传递参数 在源页面的 ViewModel 中,可以通过 `Shell.Current.GoToAsync` 方法发起导航请求,附带所需的参数。以下是一个典型的实现示例: ```csharp // SourcePageViewModel.cs public class SourcePageViewModel : INotifyPropertyChanged { public ICommand NavigateCommand { get; } public SourcePageViewModel() { NavigateCommand = new Command(async () => await NavigateToTargetPage()); } private async Task NavigateToTargetPage() { // 准备要传递的参数 var parameter = "Hello from Source Page"; // 发起导航请求参数作为字典项发送 await Shell.Current.GoToAsync(nameof(TargetPage), true, new Dictionary<string, object> { ["Greeting"] = parameter }); } public event PropertyChangedEventHandler PropertyChanged; } ``` 上述代码展示了如何从当前页面跳转至目标页面 `TargetPage`,通过查询参数的形式传递了一条消息[^1]。 --- #### 2. 在目标页面 ViewModel 中接收参数 当导航到达目标页面时,其对应的 ViewModel 可以通过构造函数注入的方式获取传递过来的参数。具体如下所示: ```csharp // TargetPageViewModel.cs public class TargetPageViewModel : INotifyPropertyChanged { private string _greeting; public string Greeting { get => _greeting; set { if (_greeting != value) { _greeting = value; OnPropertyChanged(nameof(Greeting)); } } } public TargetPageViewModel(IDictionary<string, object> queryParameters) { // 检查是否存在指定键值的参数 if (queryParameters.ContainsKey("Greeting") && queryParameters["Greeting"] is string greeting) { Greeting = greeting; } } public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } ``` 在这个例子中,`TargetPageViewModel` 的构造函数接受一个包含查询参数的字典对象,从中提取名为 `"Greeting"` 的字符串参数[^2]。 --- #### 3. 配置 AppShell 支持路由 为了让上述导航逻辑生效,需要在 `AppShell.xaml` 文件中定义好各页面的路由名称及其绑定关系: ```xml <!-- AppShell.xaml --> <Shell ... Route="SourcePage"> <!-- 主标签栏 --> <TabBar> <ShellContent Title="Source" ContentTemplate="{DataTemplate local:SourcePage}" Route="SourcePage"/> <ShellContent Title="Target" ContentTemplate="{DataTemplate local:TargetPage}" Route="TargetPage"/> </TabBar> </Shell> ``` 此处明确了两个页面的路由路径分别为 `SourcePage` 和 `TargetPage`,这使得它们能够被正确识别和访问[^3]。 --- #### 4. 绑定数据显示到 UI 最后,在目标页面 XAML 中绑定显示接收到的消息内容即可: ```xml <!-- TargetPage.xaml --> <ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="YourNamespace.TargetPage"> <VerticalStackLayout> <Label Text="{Binding Greeting}" FontSize="Large" HorizontalOptions="Center" /> </VerticalStackLayout> </ContentPage> ``` 这样就可以动态更新界面上的文字内容为传来的问候语句[^4]。 --- ### 总结 综上所述,通过结合 `.NET MAUI` 提供的 `Shell Navigation API` 与依赖注入机制,可以在遵循 MVVM 设计模式的前提下轻松达成跨页面间的数据传输需求。这种方法既保持了良好的分离关注点原则又提高了应用的整体灵活性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值