NativeScript перейти на другую страницу из пользовательской активности Android - PullRequest
0 голосов
/ 12 мая 2019

Я разрабатываю приложение с функцией входа в систему wechat. После получения одобрения от wechat он будет вызывать пользовательское действие моего приложения NativeScript. Я получаю ответ правильно, но как я могу перейти на другую страницу, установленную на главной странице, после некоторой проверки. Я использую 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: необработанное отклонение обещания: невозможно установить свойство '_moduleName' из неопределенного; Зона:; Задача: Promise.then; Значение: TypeError: Невозможно установить свойство '_moduleName' из неопределенного TypeError: Невозможно установить свойство '_moduleName' из неопределенного

Пожалуйста, дайте мне несколько советов. Заранее спасибо :)

Ответы [ 2 ]

0 голосов
/ 12 мая 2019

Запустить событие из обратного вызова 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(...);
       });
    }
}
0 голосов
/ 12 мая 2019

Подобная проблема стоила мне целых выходных, не зная, как выглядят файлы сопутствующего контроллера .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, и прочитайте эти вызовы методов и их параметры.

...