我正在使用 Secretary 和 Reagent。这是我的代码:
(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)))
忽略 :prefix 值(我尝试了"","#"以及根本不设置 :prefix),这段代码只能处理像这样的路由:
http://localhost:8080/login#/?success=SuccessMessage
但是它不能处理像这样的路由:
http://localhost:8080/login?success=SuccessMessage
我的实际目标是解析friend中的登录失败信息,如果登录失败,会将我重定向到
http://localhost:8080/login?&login_failed=Y&username=someUser
并向用户显示登录失败的消息。我不需要为此使用secretary,可以使用任何可用于解析查询参数的方法。
解析查询字符串的较困难的方法是,可以通过以下方式获取:
(-> js/window .-location .-search)
我相信在一些库中这已经做得很好了。