2015-09-14 37 views
7

我正在使用祕書和試劑。這是我的代碼:如何在clojurescript中獲取查詢參數?

(def view (atom nil)) 

(defn layout [view] 
    [:div @view]) 

(reagent/render-component [layout view] (.getElementById js/document "message")) 

(secretary/set-config! :prefix "") 

(secretary/defroute home-path "/" [query-params] 
    (timbre/info "Path : /, query params : " query-params) 
    (let [warning (:warning query-params) 
     success (:success query-params) 
     login-failed (:login_failed query-params)] 
    (when warning 
     (timbre/info "Warning found : " warning) 
     (reset! view [:h4 [:span.label.label-warning warning]])) 
    (when success 
     (timbre/info "Success found : " success) 
     (reset! view [:h4 [:span.label.label-info success]])) 
    (when login-failed 
     (timbre/info "Login failed") 
     (reset! view [:h4 [:span.label.label-warning "Login Failed."]])))) 

(let [h (History.)] 
(goog.events/listen h EventType.NAVIGATE #(secretary/dispatch! (.-token %))) 
(doto h 
    (.setEnabled true))) 

忽視的:前綴值(我想「」,「#」,也沒有設置:前綴的話)這個代碼只適用於像路線:

http://localhost:8080/login#/?success=SuccessMessage 

不過,這並不與像路線工作:

http://localhost:8080/login?success=SuccessMessage 

什麼,我其實是想實現的是從friend,這在失敗的情況下重定向我

解析登錄失敗
http://localhost:8080/login?&login_failed=Y&username=someUser 

並向用戶顯示登錄失敗消息。 我不需要爲這個使用祕書,任何可以解析查詢參數的東西都可以。

難的方法是分析查詢字符串,我可以得到:

(-> js/window .-location .-search) 

我認爲,這是已經在一些圖書館做得很好。

回答

11

我找到了。使用https://github.com/cemerick/url(適用於clojure和clojurescript),可以這樣做:

(require '[cemerick.url :as url]) 
(:query (url/url (-> js/window .-location .-href)))