我如何在iOS / Android中嵌入NativeScript Angular应用程序并导航到现有应用程序中的某些路由

时间:2019-02-05 14:42:06

标签: android ios angular nativescript

我们正在寻求将NativeScript Angular集成到现有的iOS和Android应用程序中。我们希望我们的应用程序中具有现有菜单,以便能够路由到NS Angular应用程序的各个部分。 / home / contact,例如。嵌入NS Angular应用程序时,我们关注的问题之一是框架/供应商文件/等的大量开销,并且必须为多个嵌入式应用程序一遍又一遍地复制这些部分。我们宁愿有一个包含各种视图的NS Angular应用程序,并且能够基于承载嵌入的上一个Native应用程序中点击的初始链接,将这些视图作为初始视图进行导航。

任何人都已经实现了这一目标,可以分享一些示例或任何有用的信息吗?是否可以从本地应用程序向嵌入式NS Angular应用程序发送变量以进行路由?

https://github.com/NativeScript/sample-ios-embedded/blob/master/HOWTO.md中 提到_runScript

- (void)activateNativeScript:(id)sender {
NSString *source = @"var application = require('application');"
"application.start({ moduleName: 'main-page' });";

[self _runScript: source];
}

我们是否能够通过_runScript发送路由,或者可能初始化各个部分,但仍保持相同的卖方bundle.js?

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为您无法从Angular上下文外部访问Angular。一种解决方法是,在启动RouterExtensions时将appcomponent.ts引用存储在全局变量中,

export class AppComponent {
    constructor(private routerExtensions: RouterExtensions) {
       (<any>global)._routerExtensions = routerExtensions;
    }
}

您可以使用_runScript然后

NSString *source = @"global._routerExtensions.navigate([...])";

但是请确保您在_routerExtensions初始化后访问它。另外,启动Angular应用程序的代码略有不同,如果再深入一点,您将在同一文档中找到它。

- (void)activateNativeScript:(id)sender {
    NSString *source = @"var platform = require('nativescript-angular/platform');"
         "var AppModule = require('./app.module' });"
         "platform.platformNativeScriptDynamic().bootstrapModule(AppModule);";

    [self _runScript: source];
}