2017-08-06 6 views
0

を見つけることができませんで、私のpage.tsエラーTS2304:名 'ページ' ここ

page.ts showLoginPageForm内部

var viewModel : launchViewModelModule.LaunchViewModel; 
viewModel = new launchViewModelModule.LaunchViewModel(); 

export function navigatingTo(args: observableModule.EventData) { 
    var page = <pageModule.Page>args.object; 
    page.bindingContext = viewModel; 
    } 
function showLoginPageForm(slow){ 
       var initialContainer = page.getViewById("initial-container"); 
       var mainContainer = page.getViewById("container"); 
       var containerLogo = page.getViewById("container-logo"); 
    } 

page.tsファイルに別のローカル機能が

を示し
error TS2304: Cannot find name 'page' 

私は

答えて

0

(私はそれを解決を呼び出すことができます限り)クラスベースのソリューション

var viewModel : launchViewModelModule.LaunchViewModel; 
viewModel = new launchViewModelModule.LaunchViewModel(); 

let initialContainer: StackLayout; 
let mainContainer: StackLayout; 
let containerLogo: AbsoluteLayout; 


export function navigatingTo(args: observableModule.EventData) { 
    var page = <pageModule.Page>args.object; 
    page.bindingContext = viewModel; 

    initialContainer = <StackLayout>page.getViewById("initial-container"); 
    mainContainer = <StackLayout>page.getViewById("container"); 
    containerLogo = <AbsoluteLayout>page.getViewById("container-logo"); 
    runAnimation();  
} 

次にここから呼び出す関数は、使用したいオブジェクトに属するすべてのプロパティとメソッドに対してinitialContainer.animate()というアクセス権を持つことができます。ありがとう@Kirby

0

変数をしないのですかわかりませんは、関数navigatingTo内のローカル変数として定義されており、関数showLoginPageFormでは表示されません。

おそらくpageを関数の外に宣言して、その両方に表示されるようにしたいことがあります。

+0

ありがとうございます。しかし、私はそれを宣言しなければならない場合は、Typed ViewBaseのgetViewById()メソッドにアクセスできません。これは正常にnativescriptのバニラで動作しますが、Nativescriptのタイスクリプトを使用できませんでした – Muhammed

1

ローカル関数内にグローバル変数が必要な場合は、関数パラメータまたはクラスベースのオブジェクトの使用を検討する必要があります。

すでにnativescript-typescriptですで行うプロジェクトを見て取った後、私は解決策を見つけた

class Navigator { 

    protected page: pageModule.Page; 
    protected viewModel: launchViewModelModule.LaunchViewModel; 

    constructor(viewModel: launchViewModelModule.LaunchViewModel) { 
     this.viewModel = viewModel; 
    } 

    public navigateTo(args: observableModule.EventData): void { 

     this.page = args.object as pageModule.Page; 
     this.page.bindingContext = viewModel; 
    } 

    public showLoginPageForm(slow) { 

     const initialContainer = this.page.getViewById("initial-container"); 
     const mainContainer = this.page.getViewById("container"); 
     const containerLogo = this.page.getViewById("container-logo"); 
    } 
} 
+0

xmlファイルがnavigationToメソッドを読み取っていないため、Navigatorクラスをエクスポートする必要があります – Muhammed

+0

このxmlファイルとナビゲータで何をしたいですかわかりませんクラス。新しい質問を開いて、あなたが何をしたいのかを教えてください。 xmlファイル。それ以外の場合は、問題の概要を教えてください。 私はあなたの質問と思います:ナビゲータクラスを 'export'して別のファイルで使用するべきです。 'new'キーワードを使ってこのオブジェクトをインスタンス化し、関数' navigateTo(...) 'を実行します。私は[シングルトンのデザインパターン](http://amanvirk.me/singleton-classes-in-es6/)を使用することをお勧めします – Wartoshika

関連する問題