やりたかったこと
- JavaScriptやjqueryのDOM操作を利用せずに画面上のテキストを更新させる
- Vue.jsのバインディングがRailsのAjaxから利用できるか確認する
参考サイト
準備
sample/index
ページを用意する。
$ rails g controller sample index
実装
Config
sample/index
ページでPOSTも受けられるようにルーティングを追加する。
config/routes.rb
get 'sample/index'
post 'sample/index' # 追記
Controller
リクエストがPOSTならインスタンス変数@now
に現在時刻を格納させる。
app/controllers/sample_controller.rb
class SampleController < ApplicationController
def index
if request.request_method == 'POST'
require "date"
@now = Time.now.strftime("%H時 %M分 %S秒")
end
end
end
View
Vue.jsのバインディングを利用して、JavaScript内で変数app.message
に値が代入されると画面上のテキスト(id=app
内の{{message}}
)が更新されるようにする。
app/views/sample/index.js.erb
<!-- HTML -->
<div id="app">
<p>{{ message }}</p>
</div>
<%= button_to "時刻を更新" , sample_index_path ,remote: true %>
<!-- JavaScript -->
<script src="https://unpkg.com/vue"></script>
<script>
var app = new Vue({
el: '#app',
data: {
message: '初期値'
}
})
</script>
app/views/sample/index.js.erb
app.message = "いまは <%= @now %>です。";
動作
ボタンをクリックすると変数app.message
にテキストが代入されて画面上のテキストが更新される。