所以我试图构建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:
请参阅我的回答,我的会话 - 客户端现在正在运行:)
答案 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);
感谢您的帮助!