簡體   English   中英

NativeScript從自定義Android活動導航到另一個頁面

[英]NativeScript navigate to another page from custom Android activity

我正在開發一個具有微信登錄功能的APP。 獲得微信的批准后,它將調用我的NativeScript APP的自定義活動。 我正在得到正確的響應但是在進行一些驗證后如何移動到主頁的另一個頁面。 我使用的是NativeScript + Angular。

示例代碼

getJSON("https://api.weixin.qq.com/sns/oauth2/access_token?appid=ID&secret=SECRET&code=" + res.code + "&grant_type=authorization_code").then((res) => {
    console.dir(res);
    // ===> here I want navigation
}, err => {
    console.dir(err);
})

我試過這樣的:

frame.topmost().navigate("src/app/login/login.component");

但得到錯誤:

JS:Unhandled Promise rejection:無法設置undefined的屬性'_moduleName'; 區域:; 任務:Promise.then; 值:TypeError:無法設置未定義的屬性'_moduleName'TypeError:無法設置undefined的屬性'_moduleName'

請給我一些建議。 提前致謝 :)

一個類似的問題花了整整一個周末,不知道配套控制器.js.ts文件是怎么樣的我只能建議你去基礎/來源:

https://docs.nativescript.org/core-concepts/navigation#frame

它幫助我在我的代碼中找到了問題。

如果您編寫的自定義頁面不是從template開始的,那么您也可以編寫控制器,並且很容易忽略樣本中存在的某些行 - 即使您看起來不需要它。

如果您粘貼控制器JS,我們可以理解您的上下文。

例如,這里是您應該包含的一段代碼,以幫助您調試:

在你的page-you-navigate-to.xml

<Page loaded="onPageLoaded" class="page">
...
</Page>

在你的page-you-navigate-to.ts

import { EventData } from "tns-core-modules/data/observable";
import { Page } from "tns-core-modules/ui/page";

export function onPageLoaded(args: EventData): void {
    const page = <Page>args.object;
    var context = page.navigationContext;
    page.bindingContext = context;
    console.log("Target page Loaded.");
}

啟動調試器,逐步查看具有null值的位置,並閱讀這些方法調用及其參數。

從Activity回調中觸發事件,例如

import { android } from "tns-core-modules/application";

...

public onResp(res: com.tencent.mm.opensdk.modelbase.BaseResp) {
    console.log("onResp");
    console.dir(res);
    androidApp.notify(<AndroidActivityEventData>{ eventName: 'wxapiresponse', object: android, activity: this });
}

在應用程序組件中,收聽事件

export class AppComponent implements OnInit {
    constructor(private ngZone: NgZone, private routerExtensions: RouterExtensions) {}

    ngOnInit() {
      application.android.on('wxapiresponse', this.wxApiResponse, this);
    }

    wxApiResponse() {
       // making sure the event callback runs inside Angular zone
       this.ngZone.run(() => {
          this.routerExtensions.navigate(...);
       });
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM