Экспорт Javascript , компонент Vue

#javascript #vue.js #routes

Вопрос:

Возможно ли экспортировать это / что мне нужно сделать, чтобы это работало. Я создал календарь с использованием javascript, который отображается с помощью innerHTML, и я хочу импортировать его в свой компонент vue. Возможно ли это? Я пробовал несколько разных способов, и все они приводили к ошибкам. Любые советы о том, как этого добиться, очень помогли бы, пожалуйста, были заложены кирпичом в течение нескольких часов

Файл Vue:

 <template>
    <div class="container-fluid">
        <div class="container-fluid">
      <div class="row" >
          <div class ="col-3">
          </div> <!-- Left Column-->
        <div class="col-6">
            <h2 class="display-8" id ='whiteWrite'>Make a Reservation</h2>
                <div id ='renderhere'>space for calender</div>
                <div class="row">
                    <div class=col>
            </div>
            </div>
            <div id ='hide'> TODO: Graph </div>
        </div> <!-- Middle Column-->

        <div class = "col-3"> 

        </div> <!-- Right Column-->
      </div>
    </div> <!-- Calender Div-->
    </div>
    

</template>

<script> 

export default {
    name: "Fred"
}
</script>

<style scoped>

</style>
 

Файл Js:

 "use strict";



class Cal {
    constructor(d, containerId){
        this._date = d;
        this._container = document.getElementById(containerId)


    }

    //Function for prev cal month
    prev(){
        this._date.setMonth(this._date.getMonth() - 1);
        this.render();
    }

    //Function for next cal month
    next(){
        this._date.setMonth(this._date.getMonth()   1);
        this.render();
    }

    _buildHeader(){
        //Month
        let month = document.createElement('div')
        month.id = 'month';

        let m = document.createElement("span");
        m.innerHTML = this._date.toLocaleString('default', {
            month: 'long'
        });

        //year
        m.innerHTML  = ` ${this._date.getFullYear()}` ;

        //define left button and bind click
        let leftBtn = document.createElement('div');
        leftBtn.id = "leftBtn";
        leftBtn.innerHTML = "<";
        leftBtn.addEventListener("click", event => this.prev());

        //define right button and bind click
        let rightBtn = document.createElement('div');
        rightBtn.id = "rightBtn";
        rightBtn.innerHTML = ">";
        rightBtn.addEventListener("click", event => this.next());

        month.appendChild(leftBtn);
        month.appendChild(m);
        month.appendChild(rightBtn);


        //build sun to sat

        let calendarHeader = document.createElement('div');
        calendarHeader.id = "calendarHeader";
        let days = ["Sun", "Mon", "Tues", "Wed", "Thu", "Fri", "Sat"];

        days.forEach((day) =>{
            let d = document.createElement('div');
            d.innerHTML = day;
            d.className = "header";
            calendarHeader.appendChild(d);
        });


        //Add Month year   buttons to header
        this._container.appendChild(month);

        //Add days to header
        this._container.appendChild(calendarHeader);
    }

    _buildBody(){
        let calendarBody = document.createElement('div');
        calendarBody.id = "calendarBody";

        
        //Calendar Details
        let firstDay = this._dayOfTheFirstDay().getDay();
        for (let i = 0; i < firstDay; i  ){
            let d = document.createElement('div');
            d.innerHTML = "";
            d.className = 'day';
            calendarBody.appendChild(d);
        }

        //Calendar Details
        let lastDate = this._dayOfTheLastDay().getDate();
        for (let i = 1; i < lastDate   1; i  ){
            console.log(i)
            let d = document.createElement('div');
            d.innerHTML = i;
            d.className = 'day';
            d.id = "day"   i;
            calendarBody.appendChild(d);
        }
        console.log(this._container)
        this._container.appendChild(calendarBody);
    }

    _dayOfTheLastDay(){
        return (new Date(this._date.getFullYear(), this._date.getMonth()   1, 0));
    }

    _dayOfTheFirstDay(){
        return (new Date(this._date.getFullYear(), this._date.getMonth(), 1));
    }
    //call this function everytime we update calender
    render(){
        this._container.innerHTML = '';
        this._buildHeader();
        this._buildBody();
    }


}


//Renders Calender
const containerId = 'renderhere';
let calendarInstance = new Cal(new Date(), containerId);
calendarInstance.render()
 

Комментарии:

1. Что вы пробовали, а что не получилось? Если это ваш собственный код, подумайте о том, чтобы переписать его в Vue, это упростит его использование. Код не был написан для использования с фреймворками и может привести к утечке памяти.

2. Исправлена проблема, компонент перенесен в мой main.js файл и загрузил его таким образом

3. Если вы решили эту проблему самостоятельно, подумайте о том, чтобы добавить ответ самостоятельно с рабочим кодом и пометить его как ответ. Это может помочь другим, кто сталкивается с подобной проблемой