2016-11-17 138 views
1

所以我嘗試建立的ontop的the angular-meteor WhatsApp clone tutorial using Ionic 2 CLI流星:會話的客戶端

本教程基本上刪除流星項目client文件夾,並使用meteor-client-side package離子項目中連接到服務器的流星。

這工作得很好,但現在我想訂閱流星發佈與反應參數。

搜索流星API文檔後,我找到了Session對象:

Session provides a global object on the client that you can use to store an arbitrary set of key-value pairs. Use it to store things like the currently selected item in a list.

What’s special about Session is that it’s reactive. If you call  Session.get("currentList")  from inside a template, the template will automatically be rerendered whenever  Session.set("currentList", x)  is called.

Meteor Subscribe Documentation你可以找到下面的例子:

Tracker.autorun(function() { 

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

Meteor.subscribe("privateMessages"); 

}); 

This subscribes you to the chat messages in the current room and to your private messages. When you change rooms by calling Session.set("current-room", "new-room"), Meteor will subscribe to the new room’s chat messages, unsubscribe from the original room’s chat messages, and continue to stay subscribed to your private messages.

這正是我想做的事情了。但作爲the Session documentation狀態,會是一個包我要補充到流星項目:

To add Session to your application, run this command in your terminal:

meteor add session 

現在我的問題,有沒有什麼辦法來增加會話流星客戶端軟件包?

如果我只是試圖調用Session.set()失敗上運行時與Session is not defined

我的猜測是,我需要一些NPM包,提取會話功能(基本上是一個會話,客戶端NPM包),如accounts-base-client-side

是否有其他方法可以做到這一點? 我將如何構建自己的會話 - 客戶端?

我試圖在我的流星項目中運行meteor add session,但無法在.meteor文件夾和npm_modules文件夾的任何位置找到會話的代碼。

我也看了成meteor GitHub但他們有Session.js文件包含only documentation

任何輸入如何做這樣的事情將是很好

更新:

我已經研究了accounts-base-client-side包,發現它們是使用腳本自動生成的,所以我現在正在試圖使這個腳本適用於Session而不是基於帳戶。 你可以找到我在嘗試:https://github.com/AwsmOli/session-client-side

在進行的工作,但我應該得到它的工作很快

更新2:

見我的回答,我的會話的客戶端是現在工作:)

+0

另一種方法可能是使用rxjs observables - 您已經在您的項目中使用了該庫,以遵循該教程。 – JeremyK

回答

1

我最終創建了會話客戶端軟件包,並且它的工作很好。

如果你需要它太,其可在GitHub上: https://github.com/AwsmOli/session-client-side

和NPM:

npm install session-client-side 

信用idanwe誰創建的客戶端軟件包,並使它真的很容易對他的工作適應

導入它:任何流星包:)

要與離子2應用程序使用它的工作在您的入口點(src/app/main.prod.ts & src/app/main.dev.ts

import 'session-client-side'; 

現在全球Session變量是accessable形式在任何地方你的應用程序:

Session.set("aCoolNameFormyAwsmChangingObject", myAwsmChangingObject); 

感謝您的幫助!

+0

幹得好! MDG正在慢慢分流Meteor,並將各個組件作爲NPM模塊發佈,因此有一天您可以通過官方的MDG發佈的軟件包來實現這一點。 – JeremyK

1

「會話」變量應該只顯示和可訪問。如果你需要驗證,開始一個新項目添加包並寫一些代碼來訪問它。很可能某些東西(不知不覺地)掩飾了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; 
    } 
}); 
+0

在研究getReactivley時,它看起來像是angular-meteor包的一部分,它與angular 1一起工作,我無法在angular2-meteor文檔中找到它:( – Oli

+0

什麼應該將Session變量添加到我的客戶端?只有流星的東西有:meteor-client-side,accounts-base-client-side和accounts-email-client-side。我可以安裝angular2-meteor,但根據文檔,我不需要任何東西那麼'常規'流星客戶端不能通過whatsapp教程建議的項目設置訪問 - 現在我想轉換到MeteorCLI版本... – Oli

1

按照該meteor docs,你必須將其導入:

import { Session } from 'meteor/session'

這將使它能夠在客戶端上。

在之前的流星版本中,這不是必需的,因爲它既是默認包,也自動導入到全局命名空間。

+0

如果我嘗試導入它,我的VS代碼解析導入'node_modules /meteor-typings/1.3/test/main.d.ts'在我的流星項目中,但是在運行時失敗:'未知錯誤:無法找到模塊「流星/會話」' – Oli

+0

流星包不解析爲'/ node_modules '我teor有一個可以在'〜/ .meteor/packages'找到的全局包緩存,但是你不需要擔心這一點 - 只要你添加包('meteor add session'),它將它添加到'/.meteor/packages「,流星構建工具將完成剩下的工作。 – JeremyK

+0

但是這正是問題所在,我不使用Meteor CLI來構建我的客戶端,我有一個使用Meteor CLI構建的服務器項目,以及使用客戶端訪問服務器的單獨Project,使用流星客戶端npm包。所以即時建立我的應用程序使用Ionic CLI,因此非客戶端可用的標準流星包。看看第3步發佈的Whatsapp教程。 – Oli