流星:会话 - 客户端

时间:2016-11-17 19:07:29

标签: meteor ionic2 angular2-meteor

所以我试图构建the angular-meteor WhatsApp clone tutorial using Ionic 2 CLI

的ontop

本教程基本上删除了meteor项目中的client文件夹,并使用离子项目中的meteor-client-side package连接到流星服务器。

哪种方法非常好,但现在我想订阅带有反应参数的流星出版物。

搜索Meteor API文档后,我找到了Session对象:

  

Session在客户端上提供了一个可用于的全局对象   存储一组任意键值对。用它来存储像   列表中当前选定的项目。

     

Session的特别之处在于它是被动的。如果你   从模板内部调用Session.get("currentList")模板   将随时自动重新呈现   Session.set("currentList", x)被称为。{/ p>

Meteor Subscribe Documentation中,您可以找到以下示例:

Tracker.autorun(function () {

Meteor.subscribe("chat", {room: Session.get("current-room")});

Meteor.subscribe("privateMessages");

});
     

这会为您订阅当前房间中的聊天消息   你的私信。当你改变房间   调用Session.set(“current-room”,“new-room”),Meteor将订阅   到新房间的聊天消息,取消订阅原来的房间   聊天消息,并继续保持订阅您的私人   消息。

这正是我想要做的。但正如the Session documentation所述,session是我必须添加到流星项目的包:

  

要将Session添加到您的应用程序,请在终端中运行此命令:

meteor add session

现在我的问题是,有没有办法将会话添加到流星客户端软件包?

如果我只是尝试调用Session.set(),则会在运行时使用Session is not defined

失败

我的猜测是我需要一些提取Session功能的npm包(基本上是session-client-side npm包),如accounts-base-client-side

还有其他办法吗? 我如何建立自己的会话 - 客户端?

我尝试在我的meteor项目中运行meteor add session,但无法在.meteor文件夹和npm_modules中的任何位置找到Session的代码。

我也调查了meteor GitHub,但他们包含的Session.js文件包含only documentation

任何输入如何做这样的事情都会很好

更新

我查看了基于客户端的帐户包,发现它们是使用脚本自动生成的,因此我目前正在尝试调整此脚本以使用Session而不是基于帐户。 您可以在https://github.com/AwsmOli/session-client-side

找到我的尝试

仍在进行中,但我应该尽快开始工作

更新2:

请参阅我的回答,我的会话 - 客户端现在正在运行:)

3 个答案:

答案 0 :(得分:1)

“Session”变量应该只显示并且可以访问。如果您需要验证,请启动一个新项目添加包并编写一些代码来访问它。很可能某些事情(无意中)破坏了Session变量 - 我之前已经看过另一个包。

另一种方法是使用“getReactively”。下面是一个在查询中使用它的帮助器。确保在帮助程序之前声明它(否则它将不起作用)。这个使用另一个帮助器的结果,但它可以是任何变量,你只需为反应分配变量就可以启动并运行帮助器。

this.helpers({
  currentUser: () => { return Meteor.user() },
  elder: () => {
    let e = Elders.findOne({_id: this.getReactively('this.currentUser._id')});
    if (e) {
      utils.services.setupElder(e);
    }
    return e;
  }
});

答案 1 :(得分:1)

根据meteor docs,您必须导入它:

import { Session } from 'meteor/session'

这将在客户端启用它。

在早期的meteor版本中,这不是必需的,因为它既是默认包,又自动导入全局命名空间。

答案 2 :(得分:1)

我最终自己创建了会话客户端软件包,并且工作得很好。

如果你也需要它,它可以在GitHub上找到: https://github.com/AwsmOli/session-client-side

和NPM:

npm install session-client-side
创建客户端软件包的idanwe信用额度,并使其很容易适应他的工作以使用任何流星包:)

与Ionic 2应用程序一起使用:

将其导入您的入口点(src/app/main.prod.ts& src/app/main.dev.ts

import 'session-client-side';

现在,全局Session变量可以在您的应用中的任何位置访问:

 Session.set("aCoolNameFormyAwsmChangingObject", myAwsmChangingObject); 

感谢您的帮助!