nativescript - 如何设置全局变量

时间:2017-12-06 14:21:21

标签: nativescript

我从最新版本的nativescript开始。

我已经在官方网页上完成了教程,但现在我的问题多于答案。

任何人都可以告诉我,我可以使用哪些策略设置一些变量,例如在成功登录后,如何设置变量甚至更好,运行一些全局检查的功能,而不是每个视图或模型文件? 我看到app.js是应用程序的起点,但看起来它无法进行任何全局检查?

我认为,第二个问题是相关的: 几乎每个模型视图文件(名为{viewname}的文件).js都在使用:

var frameModule = require('ui/frame');

有没有办法申报一次?或者我每次需要帧方法时都要运行它?或者,如果可能的话,可能导致性能不佳?

感谢您的任何建议。

3 个答案:

答案 0 :(得分:1)

谢谢尼古拉。我使用这种模式(也许会帮助别人) 注册JS:

var page = require ("ui/core/view");
var frameModule = require('ui/frame');
var appSettings = require('application-settings');

exports.loaded = function(args) {
page = args.object;
};

exports.register = function() {
var userName = page.getViewById('userName');
var userPass = page.getViewById('userPass');

if (userName.text != '' &&  userPass.text != '') {
    var name = userName.text;
    var pass = userPass.text;

    appSettings.setString('name', name);
    appSettings.setString('pass', pass);
    appSettings.setBoolean('auth', true);

    var topmost = frameModule.topmost();
    var navigationEntry = {
        moduleName: "main-page",
        context: { info: "something you want to pass to your page" },
        animated: true,
        transition: "curlDown",
        clearHistory: true
    };
    topmost.navigate(navigationEntry);

} else {
    alert('Please, fill form');
}
};

答案 1 :(得分:1)

NativeScript具有global可变范围。

要使用它,请在变量名之前添加global.

global.userName = "usernameXYZ";

调用它:

console.log("Username= "+global.userName);

答案 2 :(得分:0)

在model.js(或任何您想调用的模型)中,我将模型用作此类全局变量

`
var viewModel=require("data/observable");
var model= new viewModel.Observable();
module.exports= model;`

然后在您的login.js中说

`  const model=require('./model')
 const password = //a password from page
 const userName = //a name from page
//after some logic to verify credentials set them accordingly as below
 model.password=password
model.userName=userName
`

现在,如果说您已导航到home.js或任何页面,只需在需要时调用它即可,const pass=model.password,name=model.userName都来自'model.js'。