Передача значения с клиента на сервер Phoenix с использованием LiveView во время монтирования - PullRequest
0 голосов
/ 31 марта 2020

Я пытаюсь передать значение из браузера (например, localstorage) на сервер и сделать его доступным, когда смонтирован живой шаблон (leex) и создано представление пользовательского интерфейса. Попробовал только следующее, чтобы получить сообщение, показанное ниже.

<JS>
let liveSocket = new LiveSocket("/live", Socket, {params: {init_state: "value from localstorage"}..

<Phoenix>
def mount(params, _session, socket) do
  IO.inspect(params)  # this returns "not route mounted"

Ответы [ 2 ]

1 голос
/ 02 апреля 2020

def mount(params, _session, socket) do

В LiveView первый аргумент с именем params, к которому вы пытаетесь обратиться, используется для параметров запроса, а также для любых параметров пути к маршрутизатору, когда вы смонтировали LiveView из маршрутизатора, который не является ваш случай, так как вы вызываете его из шаблона. Вот почему вы получаете сообщение об ошибке.

Чтобы получить значение init_state, которое вы передаете в let liveSocket = new LiveSocket("/live", Socket, {params: {init_state: "value from localstorage"}.. Вам нужно вызвать get_connect_params/1 что-то в строке

def mount(_params, _session, socket) do
  init_state = get_connect_params(socket)["init_state"]

  IO.inspect(init_state)
end

Важно отметить, что get_connected\1 доступен только для использования внутри функции монтирования.

1 голос
/ 31 марта 2020

get_connect_params/1 представляется способом сделать это в соответствии с этой страницей проблемы (https://github.com/phoenixframework/phoenix_live_view/issues/204). Также это параметр socket, а не params для поиска переменной в.

<JS>
let liveSocket = new LiveSocket("/live", Socket, {params: {init_state: "value from localstorage"}..

<Phoenix>
def mount(_params, _session, socket) do
  IO.inspect(get_connect_params(socket)["init_state"])  
...