2017-08-06 106 views
0

这里是我的page.ts错误TS2304:找不到名称 '页'

page.ts

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"); 
    } 

的showLoginPageForm内的另一个本地函数的page.ts文件显示

error TS2304: Cannot find name 'page' 

我不知道我错过了什么

回答

0

我找到了解决办法,在已经与nativescript-打字稿做一个项目采取后一看

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();  
} 

然后从这里呼叫功能,例如showLoginPageForm()可以访问initialContainer.animate()所有属性和方法属于您要使用的对象。谢谢@Kirby

0

可变page被定义为功能navigatingTo内的局部变量,并且对功能showLoginPageForm不可见。

也许你想声明page以外的功能,以便它们都可以看到它们。

+0

谢谢@Kirby但是如果我应该在外面声明它,我将无法访问TypeView ViewBase的getViewById()方法。这工作正常与nativescript香草,但失败的本地脚本打字稿工作 – Muhammed

1

如果您在本地函数中需要全局变量,则应考虑使用函数参数或基于类的对象。

类基础的解决方案(只要我可以调用它的解决方案)

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

我必须导出Navigator类,因为我的XML文件不读取navigationTo方法 – Muhammed

+0

我不知道你愿意做什么这个XML文件和导航类。你可以开一个新的问题,告诉我们你想做什么。 xml文件。否则,请给我一个你的问题的简要概述。 我认为你的问题:你应该导出导航类,以便在另一个文件中使用它。比使用'new'关键字实例化这个对象并且执行函数'navigateTo(...)'。我会建议使用[Singleton设计模式](http://amanvirk.me/singleton-classes-in-es6/) – Wartoshika

相关问题