Я разрабатываю приложение с функцией входа в 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' из неопределенного

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

0
Jibon 12 Май 2019 в 13:25

2 ответа

Лучший ответ

Запустить событие из обратного вызова 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
Manoj 12 Май 2019 в 19:21

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

0
VeRo 12 Май 2019 в 19:04