element-ui 全部导入与按需导入

element-ui 有两种使用方法:一种是(默认)全部导入,还有就是根据自己需要按需导入。

如何进行选择,这里提供一个简单方法:
主要就是一句话, 如果用到的组件少, 要按需引入, 如果用到的组件很多,就全部引入, 因为按需引入全部的, 和全部引入效果一样

一、全部导入

全局导入 在mian.js中导入(在vue项目中):

import Vue from 'vue';
import ElementUI from 'element-ui'; // 导入 elementUI
import 'element-ui/lib/theme-chalk/index.css'; // 导入 css
import App from './App.vue';

Vue.use(ElementUI);

以上代码便完成了 Element 的引入。需要注意的是,样式文件需要单独引入, 如果自定义主题, 则引入自定义主题.

特点:

使用组件 默认全部注册 无需导入 直接使用即可
全部导入整个UI框架,可能导致文件过大,会增加项目体积

二、按需导入

如果你只希望引入部分组件,比如 Button 和 Select,那么需要在 main.js 中写入以下内容(vue项目中):

import Vue from 'vue';
import { Button, Select } from 'element-ui';
import App from './App.vue';

Vue.use(Button)
Vue.use(Select)

/* 或写为
Vue.component(Button.name, Button);
Vue.component(Select.name, Select);
*/

特点:

没用用到的东西,不会被加入到项目中,减少了项目体积
每当使用到element-ui 具体组件时都需要手动去导入

按需导入时完整组件列表(相当于全部导入时的ElementUI)和引入方式:
有了这个按需导入时就很方便了,需要调用哪个就解开注释(需要同时解开导入 和 调用)

import Vue from 'vue'
// 导入 组件
import {
  // Pagination,
  // Dialog,
  // Autocomplete,
  // Dropdown,
  // DropdownMenu,
  // DropdownItem,
  // Menu,
  // Submenu,
  // MenuItem,
  // MenuItemGroup,
  // Input,
  // InputNumber,
  // Radio,
  // RadioGroup,
  // RadioButton,
  Checkbox,
  // CheckboxGroup,
  // Switch,
  // Select,
  // Option,
  // OptionGroup,
  // Button,
  // ButtonGroup,
  // Table,
  // TableColumn,
  // DatePicker,
  // TimeSelect,
  // TimePicker,
  // Popover,
  // Tooltip,
  // Breadcrumb,
  // BreadcrumbItem,
  // Form,
  // FormItem,
  // Tabs,
  // TabPane,
  // Tag,
  // Tree,
  // Alert,
  // Slider,
  // Icon,
  // Row,
  // Col,
  // Upload,
  // Progress,
  // Spinner,
  // Badge,
  // Card,
  // Rate,
  // Steps,
  // Step,
  // Carousel,
  // Scrollbar,
  // CarouselItem,
  // Collapse,
  // CollapseItem,
  // Cascader,
  // ColorPicker,
  // Loading,
  // MessageBox,
  // Message
} from 'element-ui'

//调用 组件
  
// Vue.use(Pagination)
// Vue.use(Dialog)
// Vue.use(Autocomplete)
// Vue.use(Dropdown)
// Vue.use(DropdownMenu)
// Vue.use(DropdownItem)
// Vue.use(Menu)
// Vue.use(Submenu)
// Vue.use(MenuItem)
// Vue.use(MenuItemGroup)
// Vue.use(Input)
// Vue.use(InputNumber)
// Vue.use(Radio)
// Vue.use(RadioGroup)
// Vue.use(RadioButton)
Vue.use(Checkbox)
// Vue.use(CheckboxGroup)
// Vue.use(Switch)
// Vue.use(Select)
// Vue.use(Option)
// Vue.use(OptionGroup)
// Vue.use(Button)
// Vue.use(ButtonGroup)
// Vue.use(Table)
// Vue.use(TableColumn)
// Vue.use(DatePicker)
// Vue.use(TimeSelect)
// Vue.use(TimePicker)
// Vue.use(Popover)
// Vue.use(Tooltip)
// Vue.use(Breadcrumb)
// Vue.use(BreadcrumbItem)
// Vue.use(Form)
// Vue.use(FormItem)
// Vue.use(Tabs)
// Vue.use(TabPane)
// Vue.use(Tag)
// Vue.use(Tree)
// Vue.use(Alert)
// Vue.use(Slider)
// Vue.use(Icon)
// Vue.use(Row)
// Vue.use(Col)
// Vue.use(Upload)
// Vue.use(Progress)
// Vue.use(Spinner)
// Vue.use(Badge)
// Vue.use(Card)
// Vue.use(Rate)
// Vue.use(Steps)
// Vue.use(Step)
// Vue.use(Carousel)
// Vue.use(Scrollbar)
// Vue.use(CarouselItem)
// Vue.use(Collapse)
// Vue.use(CollapseItem)
// Vue.use(Cascader)
// Vue.use(ColorPicker)

// Vue.use(Loading.directive)

// Vue.prototype.$loading = Loading.service
// Vue.prototype.$msgbox = MessageBox
// Vue.prototype.$alert = MessageBox.alert
// Vue.prototype.$confirm = MessageBox.confirm
// Vue.prototype.$prompt = MessageBox.prompt
// Vue.prototype.$notify = Notification
// Vue.prototype.$message = Message

三、在使用 element-ui 遇到的一点问题

在Vue中使用element-ui的按需导入时,大部分组件都是以import { XXXX } from 'element-ui'的方式引入,然后以Vue.component(XXX.name, XXX);或者Vue.use(XXX)的方式注册,当然也有例外,有些组件的使用需要挂载到原型对象上,这里需要注意的是在全部导入的情况下,不需要再次进行手动挂载。如果再次挂载就会报错。

例如:Message消息提示组件

在main.js引入

import { Message } from 'element-ui

在main.js注册,这里是挂在在Vue原型上的

Vue.prototype.$message = Message;

使用

<template>
  <div id="app">
        <el-button type="primary" @click='clickBtn'>主要按钮</el-button>
  </div>
</template>
<script>
export default {
  name: 'App',
  components: {
  },
  methods:{
    clickBtn:function(){
      this.$message({
          message:'这是一条提示信息'
        });
    }
  }
}
</script>

猜你喜欢

转载自blog.csdn.net/qq_44721831/article/details/106199989