プログラムを中心とした個人的なメモ用のブログです。 タイトルは迷走中。
内容の保証はできませんのであしからずご了承ください。

2019/07/24

ASP.NET Core で Vue.js を使用する

update2019/11/25 event_note2019/07/24 4:39

ASP.NET Core でアプリケーションを作成していて、フロントエンドの処理を jQuery のみで書くのが辛くなってきたので、Vue.js を使うことにしました。

ちなみに私は React も Angular も使ったことがなく、フロントエンドのフレームワークを使うのは初めてです。

Vue.js を選んだのは、プログレッシブフレームワークということで、部分的に採用可能だというところに惹かれ、始めやすそうだったからです。

環境

  • Visual Studio 2017
  • ASP.NET Core 2.2
  • Vue.js 2.6.10

プロジェクトの作成

まずは Visual Studio でプロジェクトを作成します。
普通に MVC のプロジェクトとして作成します。

Vue.js のインストール

普通は CDN を直接参照したり、npm でインストールしたりすると思いますが、今回は Visual Studio を使っているので LibMan (Library Manager) で CDN からダウンロードしてインストールします。
LibMan は Visual Studio のみでフロントエンドのライブラリも全て管理できるので便利です。

ソリューションエクスプローラーでプロジェクトを右クリックし、「追加」>「クライアント側のライブラリを追加するには」を選択します。

vue と入力して Enter を押すと、最新バージョンの Vue.js が表示されるので、インストールします。

実際に必要なのは、vue.jsvue.min.js だけなので、この2つのファイルだけを指定してインストールしても OK です。

Vue.js のインクルード

Vue.js をインストールしたら、Views > Shared > _Layout.cshtml を編集して、Vue.js のコードを読み込みます。
以下、該当箇所の抜粋です。

<environment include="Development">
    <script src="~/lib/jquery/dist/jquery.js"></script>
    <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.js"></script>
    <script src="~/lib/vue/vue.js"></script>
</environment>
<environment exclude="Development">
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"
            asp-fallback-src="~/lib/jquery/dist/jquery.min.js"
            asp-fallback-test="window.jQuery"
            crossorigin="anonymous"
            integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=">
    </script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.bundle.min.js"
            asp-fallback-src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"
            asp-fallback-test="window.jQuery && window.jQuery.fn && window.jQuery.fn.modal"
            crossorigin="anonymous"
            integrity="sha384-xrRywqdh3PHs8keKZN+8zzc5TX0GRTLCcmivcbNJWm2rs5C8PRhcEn3czEjhAO9o">
    </script>
    <script src="~/lib/vue/vue.min.js"></script>
</environment>

Development では vue.js を、Development 以外では vue.min.js を読み込むようにします。

サンプル

まずは Hello World ということで、Vue.js の公式サイトのサンプルコードを動かしてみます。

とりえあずさくっと動かしたいので、Views > Home > Index.cshtml に以下のコードを追加してみます。

<div id="app">
    {{ message }}
</div>

@section scripts {
    <script>
        var app = new Vue({
            el: '#app',
            data: {
                message: 'Hello Vue!'
            }
        })
    </script>
}

アプリケーションを実行して、Hello Vue! と表示されれば OK です。

簡単な解説

new Vue で Vue.js のオブジェクトを作成し、el プロパティで、HTML 要素のセレクター(id)を指定し、data プロパティでデータの定義を行います。
ここでは message というデータを定義し、Hello Vue! を代入しています。

Vue が適用された要素内(ここでは <div id="app"> )では、{{ message }} という表記(マスタッシュ構文)で、data に定義したデータを展開することができます。

Vue.js の省略記法を使う際の注意点

Vue.js でよく使う v-bindv-on には省略記法があります。

<!-- 完全な構文 -->
<a v-bind:href="url"></a>
<a v-on:click="doSomething"></a>
 
<!-- 省略記法 -->
<a :href="url"></a>
<a @click="doSomething"></a>

しかし、 @ は Razor 構文でも使われているため、@ を使うと Razor 構文として解釈され、View 表示時にエラーとなります。

一応レンダリングエンジンを変えることもできるようですが、私はここまでやっていません。

ちなみに、v-bind の省略記号 : は使えました。