单击电子邮件中的链接时如何路由其他组件

时间:2018-12-13 09:54:53

标签: android angular typescript nativescript

当我从电子邮件中单击此链接http://secsystem.domain.tk/v1/resetPassword/11E8FC9时,我想在我的应用程序中打开此组件ResetPassIdComponent

我使用以下代码:

AndroidManifest.xml

        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="http" android:host="secsystem.domain.tk" android:pathPattern="/v1/resetPassword/.*"></data> 
        </intent-filter>

在routing.ts中,我编写了这段代码:

 const routes: Routes = [
  {
    path: 'home',
    component: HomeComponent,
    canActivate: [AuthGuard],
    children: [
      {
        path: 'fp', component: FirstPageComponent
      },
      {
        path: 'profile', component: ProfileComponent
      }
    ]
  },
  {
    path: 'outsidelogin',
    component: outsideloginComponent,
    children: [
      { path: 'login', component: LoginFirstComponent },
      { path: 'register', component: RegisterComponent }
    ]
  },
    { path: 'v1/resetPasswordRequest/:id', component: ResetPassIdComponent },
    { path: '', redirectTo: '/home/fp', pathMatch: 'full' }
];

对此有什么解决办法吗?

3 个答案:

答案 0 :(得分:0)

尝试这种方式,您只需要添加android:pathPrefix="/v1/resetPassword"

           <intent-filter
                android:autoVerify="true"
                tools:targetApi="m">
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />

                <data
                    android:host="secsystem.domain.tk"
                    android:pathPrefix="/v1/resetPassword"
                    android:scheme="https" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />

                <data
                    android:host="secsystem.domain.tk"
                    android:pathPrefix="/v1/resetPassword"
                    android:scheme="http" />
            </intent-filter>

答案 1 :(得分:0)

第1步。创建一个名为routingTest.component.ts的新空组件,然后创建console.log('routingTest!');在ngOnInit()中。

第2步。尝试从url(例如localhost / urlTest)访问该组件。看看您是否成功console.log,转到下一步。

第3步。使用以下所述的参数在“路线”中添加路线定义。

routing.ts

{ path: 'urlTest/:id', component: RoutingTestComponent}

配置路由后,现在您将能够获取url参数。并使用@ angular / router中的ActivatedRoute提取参数,如here in the documentation所述:

routingTest.component.ts

import { Router, ActivatedRoute, ParamMap } from '@angular/router'; //import library
    Constructor(public route:Router){}
    ngOnInit(){
        let id = this.route.snapshot.paramMap.get('id');
        console.log(id);
    }

如果console.log“ id”成功,则意味着您可以执行任何操作。

任何问题都欢迎。希望对您有所帮助。

答案 2 :(得分:0)

您在Android清单中所做的一切都是为了让系统了解在匹配此特定网址格式时必须打开此应用程序。 Angular在这里无关。如果要在使用特定URL模式打开应用程序时导航到特定组件,则必须手动处理它。

安装nativescript-urlhandler插件并查询用于在应用程序组件中打开应用程序并相应地在路由器中启动导航的URL。

import { Component, OnInit } from "@angular/core";

从'nativescript-urlhandler'导入{handleOpenURL,AppURL};

@Component({   选择器:“ gr-main”,   模板:“” }) 导出类AppComponent {     constructor(){     }

ngOnInit(){
    handleOpenURL((appURL: AppURL) => {
        console.log('Got the following appURL', appURL);
    });
 }

}

来源:How to routing in a app when I click a link from email