본문 바로가기

닷넷관련/ASP.NET MVC & Core

asp.net mvc core 에서 vue.js 사용하기

asp.net mvc core 에서 vue.js 사용하기

솔루션에서 추가 > 클라이언트 라이브러리추가.. 를 선택하여 
vue, axios 를 각각 설치 하면 lib 폴더에 설치가 됩니다.


설치 이후  libman.js 파일이 루트에 생성되며, 설치 된 vue, axios 을 버전과 함께 보실 수 있습니다.

{
  "version": "1.0",
  "defaultProvider": "cdnjs",
  "libraries": [
    {
      "library": "vue@2.5.21",
      "destination": "wwwroot/lib/vue/"
    },
    {
      "library": "axios@0.18.0",
      "destination": "wwwroot/lib/axios/"
    }
  ]
}

VueSubscriberListComponent 의 js 파일을 js 폴더 하단에 만듭니다.

var subscriberListComponent = new Vue({
    el: '#subscriber-list-component',
    data() {
        return {
            subscribers: [],
            isViewReady: false
        };
    },
    methods: {
        refreshData: function () {
            var self = this;
            this.isViewReady = false;
            //UPDATED TO GET DATA FROM WEB API
            axios.get('/api/subscribers/getall/')
                .then(function (response) {
                    self.subscribers = response.data;
                    self.isViewReady = true;
                })
                .catch(function (error) {
                    alert("ERROR: " + (error.message | error));
                });
        }
    },
    created: function () {
        this.refreshData();
    }
});


axios 를 통해 호출하는/api/subscribers/getall  서비스를 만들어보죠. 우선 컨트롤러를 하나 생성하여 구축합니다.
SubscribersController.cs 컨트롤러를 만들어 서비스를 제공해 보죠.



객체에 데이터 2개 정도 더미값을 넣어서 ok() 함수를 통해 서비스를 제공합니다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
namespace WayKuratWeb.SimpleVueJs.Controllers
{
    [Route("/api/[controller]/[action]/")]
    public class SubscribersController : Controller
    {
        [HttpGet]
        public IActionResult GetAll()
        {
            //hard coded data for brevity, this must be from a data store on the real world
            var subs = new List<Subscriber>();
            subs.Add(new Subscriber() { Id = 1, Name = "JEK", Email = "jekhaxor@test.test" });
            subs.Add(new Subscriber() { Id = 1, Name = "Jikie", Email = "jekiedraws@test.test" });
            return Ok(subs);
        }
    }
    public class Subscriber
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Email { get; set; }
    }
}



index.cshtml 뷰에 아래와 같이 vue 와 axios 를 통해 서비스한 코드를 넣습니다.

@{
    ViewData["Title"] = "Home Page";
}
<div class="text-center">
    <div id="subscriber-list-component">
        <h3>WayKurat Subscribers </h3>
        <div v-if="isViewReady == true">
            <ol>
                <li v-for="u in subscribers">
                    {{ u.name }} - {{u.email}}
                </li>
            </ol>
            <button class="btn btn-primary btn-block" v-on:click="refreshData">REFRESH</button>
        </div>
        <div v-else>
            <div>Loading data...</div>
        </div>
    </div>
</div>
@section Scripts{
    <script src="~/lib/vue/vue.js"></script>
    <script src="~/lib/axios/axios.js"></script>
    <script src="~/js/VueSubscriberListComponent.js"></script>
}

하단 script 세션 부분에 vue , axios 가 존재하며, VueSubscriberListComponent.js 의 컨트롤러에서 view 인 index.cshtm 에 부분바인딩 합니다.