@l4m3r

Как правильно подключить стиль компонента?

Изучаю vue первый день. Не могу разобраться. Хочу подключить библиотеку element-ui.
Простой HelloWorld:

<!doctype html>
<html lang="{{ app()->getLocale() }}">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta name="csrf-token" content="{{ csrf_token() }}">
        <link type="text/css" href="{{ asset('css/app.css') }}">
        <title>{{ config('app.name') }}</title>
    </head>
    <body>
        <div id="app">
            <el-button @click="visible = true">Button</el-button>
            <el-dialog :visible.sync="visible" title="Hello world">
                <p>Try Element</p>
            </el-dialog>
        </div>
        <script src="{{ asset('js/app.js') }}"></script>
    </body>
</html>

Если задать явно "import 'element-ui/lib/theme-chalk/index.css'" то всё работает.

require('./bootstrap');

import Vue from 'vue';
import 'element-ui/lib/theme-chalk/index.css';
import Element from 'element-ui';

Vue.use(Element);

const app = new Vue({
    el: '#app',
    data() {
        return {
            visible: false
        }
    },
    mounted() {
        console.log('test');
    }
});


Но разве так правильно делать, стиль в js подключать? Я убрал import css из app.js.
Потом, добавляю в начало app.scss строку import '~element-ui/lib/theme-chalk/index'; Всё компилируется, но стили не применяются. Как такое может быть?

Ещё пара вопросов вдогонку:
1) Как вообще правильно подключать стили компонента? Писать style тег во .vue / импортировать из .vue / подгружать вебпапом отдельно в app.scss?

2) Есть ли какая-то разница между import (default) и require при использовании webpack (laravel mix)?
  • Вопрос задан
  • 1362 просмотра
Решения вопроса 1
kleinmaximus
@kleinmaximus
Senior Full-stack Javascript Developer
Импортировать стили надо там же, где Вы подключаете саму библиотеку. Ни к чему разносить это в разные части кода. Если Вам мозолят глаза расширения .css в js-коде основной программы, то можете сделать отдельный модуль, который будет подключать как саму библиотеку Element-ui, так и стили, а уже этот модуль подключать в свое приложение. А вообще в документации довольно подробно описано как подключать стили, и почему сделано именно так.

Кстати, а что такое app.scss, и как оно у Вас подключается?

1) Как вообще правильно подключать стили компонента? Писать style тег во .vue / импортировать из .vue / подгружать вебпапом отдельно в app.scss?


2) Есть ли какая-то разница между import (default) и require при использовании webpack (laravel mix)?

Это разные системы модулей - подробнее об этом (и не только) здесь. Советую изучить все материалы из данного учебника - вопросов у Вас будет на много меньше :)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы