Elm:
Читання текстового файлу
Як це зробити:
Elm напряму не має здатності читати файли через браузерну безпеку, але ви можете использовати Port для інтеграції з JavaScript.
port module Main exposing (..)
import Html exposing (Html, button, div, text)
import Html.Events exposing (onClick)
port readFile : () -> Cmd msg
port fileRead : (String -> msg) -> Sub msg
type Msg
= ReadFile
| FileRead String
type alias Model =
{ content : String
}
init : Model
init =
{ content = ""
}
update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
case msg of
ReadFile ->
(model, readFile ())
FileRead content ->
({ model | content = content }, Cmd.none)
view : Model -> Html Msg
view model =
div []
[ button [ onClick ReadFile ] [ text "Читати файл" ]
, div [] [ text model.content ]
]
main =
Html.program
{ init = (init, Cmd.none)
, update = update
, subscriptions = \_ -> fileRead FileRead
, view = view
}
JavaScript для інтеграції з портами Elm:
app.ports.readFile.subscribe(function() {
var selectedFile = document.getElementById('file-input').files[0];
var reader = new FileReader();
reader.onload = function(event) {
app.ports.fileRead.send(event.target.result);
};
reader.readAsText(selectedFile);
});
HTML елемент для вибору файлу:
<input type="file" id="file-input" />
Поглиблений розгляд:
Elm був створений для надання надійності та продуктивності frontend-розробці. Читання файлів локально не підтримується безпосередньо через пріоритет безпеки й простоту. Історично Elm вибрали шлях взаємодії з JavaScript для таких задач через Ports. Альтернативою є використання File Reader API в JavaScript і передача даних через порт у Elm. Це рішення дозволяє обробляти файли безпосередньо в браузері.
Дивіться також:
- Офіційні порти Елма - навчання, як використовувати порти для двосторонньої взаємодії з JavaScript.
- File Reader API - опис API для читання змісту файлів у веб-браузерах.