質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Riot.js

Riot.jsは、React.jsに似たコンポーネント指向なJSフレームワークです。非常に軽量であり、コンポーネントで設計しやすいといったメリットがあります。また、MVCのように分割できることも特徴です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

AngularJS

AngularJSはオープンソースのJavaScriptフレームワークです。ブラウザ上で動作するウェブアプリケーションの開発にMVCアーキテクチャを取り入れることを目的としています。

Q&A

解決済

1回答

2380閲覧

riot.jsでinput/fileで登録したファイル名を簡単に取得する方法はあるのでしょうか?

退会済みユーザー

退会済みユーザー

総合スコア0

Riot.js

Riot.jsは、React.jsに似たコンポーネント指向なJSフレームワークです。非常に軽量であり、コンポーネントで設計しやすいといったメリットがあります。また、MVCのように分割できることも特徴です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

AngularJS

AngularJSはオープンソースのJavaScriptフレームワークです。ブラウザ上で動作するウェブアプリケーションの開発にMVCアーキテクチャを取り入れることを目的としています。

0グッド

0クリップ

投稿2016/09/17 12:49

編集2016/09/17 17:32

AngularJSだとfile-modelという属性を使って簡単に取得する方法があると思うのですが、riot.jsにもこのようなものがあるのか、わかる方がいれば教えていただきたいです。
(調べても見つけることができなく、ただ単に存在しないのかもしれませんが、よろしくお願いします)

【追記】

下記のようなコードで、アイコンをクリックして画像を選択すると、プレビューを表示したいと思っているのですが、なぜかできなくて困っています。
初心者ですが以前ネットで調べながらAngularで同様のものを作成したことがあったため、最初にご質問させていただいた答えがわかればできると思っていたのですが、躓いてしまったので、どこが悪いのか教えていただけると嬉しいです。

しっかりreader.onloadは実行されて、変数previewもtrueになっていることは確認できているのですが、なぜか表示がされない状況です。。

HTML

1<input type='file' id='inputEyecatch' class='inputEyecatch' onchange={onChange } hidden /> 2<i class='fa fa-picture-o' aria-hidden='true'></i> 3<img id='eyecatchImage' class='eyecatchImage' src={ previewSrc } show={ preview }>

javascript

1this.onChange = function(e) { 2 var fileData = e.target.files[0]; 3 var fileType = fileData.type; 4 5 if(!fileType.match(/^image/)) { 6 alert('画像を選択してください'); 7 return; 8 } 9 var reader = new FileReader(); 10 11 reader.onerror = function() { 12 alert('ファイル読み取りに失敗しました') 13 } 14 15 reader.onload = function() { 16 var preview = true; 17 var previewSrc = reader.result; 18 console.log(preview); 19 } 20 21 reader.readAsDataURL(fileData); 22}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Riotにそういった機能はありません。公式ドキュメントに書いてあることが全てで、非常にシンプルです。
name属性を与えた要素にはthis.hogeのようにしてアクセスできるので、それでファイルを取得します。

javascript

1const filename = this.fileInput.files[0].name;

追記に対して

以下のように書いてみてください。
Riotは、this.でアクセスできるメンバーにバインドできます。
また、内部で非同期処理の後、プロパティを更新する場合は明示的にupdateを呼び出す必要があります。

javascript

1this.onChange = (e) => { 2 const fileData = e.target.files[0]; 3 const fileType = fileData.type; 4 5 if(!fileType.match(/^image/)) { 6 alert('画像を選択してください'); 7 return; 8 } 9 10 const reader = new FileReader(); 11 12 reader.onerror = () => { 13 alert('ファイル読み取りに失敗しました') 14 }; 15 16 reader.onload = () => { 17 this.preview = true; 18 this.previewSrc = reader.result; 19 this.update(); 20 console.log(preview); 21 }; 22 23 reader.readAsDataURL(fileData); 24};

投稿2016/09/17 16:33

編集2016/09/17 17:50
syuilo

総合スコア393

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/09/17 17:35 編集

ご回答ありがとうございます。 Riotは本当にシンプルな機能なのですね。 最初に質問させていただいた回答がわかればできると思っていたことが質問時からずっとできない状況で困っているので、もしよろしければ質問内容の【追記】以下を読んでいただき、そちらのご回答をいただけますでしょうか? よろしければ何卒よろしくお願いいたします。
syuilo

2016/09/17 17:41

追記しました :v:
退会済みユーザー

退会済みユーザー

2016/09/17 17:49

こんな遅いお時間にご丁寧に回答いただき、ありがとうございます!! しっかり表示することができました。本当に助かりました! this.previewでも試していたのですが、「this.update();」の記載がなく、しっかり更新できていないということがわかりました。 ご丁寧に回答いただいたおかげで、今後も多少スムーズに進めそうです。 本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問