关于Vue中element按需引入

在项目中使用elementui确实是很方便的一件事,但是如果我只需要用到其中的某一些元素来简化代码的话,全局引入就显得有点臃肿了,这就有了按需引入的概念,需要什么就引入什么,方便

一、安装element-ui

npm i element-ui -S

二、安装按需引入的必要插件

npm install babel-plugin-component -D

三、修改.babelrc文件(注意这个文件每个人根据项目所需依赖不同而不同,只需要在plugin后加上element的component部分就可以)

{
  "presets": [
    ["env", {
      "modules": false,
      "targets": {
        "browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
      }
    }],
    "stage-2"
  ],
  "plugins": ["transform-vue-jsx", "transform-runtime",
    [
      "component",
      {
        "libraryName": "element-ui",
        "styleLibraryName": "theme-chalk"
      }
    ]
  ]
}

四、在main.js中按需引入

import { Button, Select, Message } from "element-ui";
Vue.use(Button);
Vue.use(Select);
Vue.use(Message);

当然这样子的话会有点难看,Vue.use是支持链式写法的

import { Button, Select, Message } from "element-ui";
Vue.use(Button).use(Select).use(Message);

踩坑(更新中......):

1、Message有点特殊,在项目中不能直接使用,由于其他组件都是标签形式的,,message需要绑定到vue的原型上才能像官网一样使用

import { Button, Select, Message } from "element-ui";
Vue.use(Button).use(Select).use(Message);

Vue.prototype.$message = Message

2、页面刷新的时候总会无故弹出一个空的提示框,找了很久,很头疼,最后是Vue.use()的缘故,改成

Vue.component(Message.name, Message)

3、给Dropdown下拉菜单添加点击方法的时候

    ①、直接在el-dropdown-item上绑定click.native事件

    ②、在el-dropdown根组件监听command,再给el-dropdown-item绑定 command 方法,监听的command的属性值,例如switch 循环就可以,在case中执行methods中的方法,或者蹩脚的if也能完成

下面贴上我在站里大佬帖中找到的组件列表

import {
  Pagination,
  Dialog,
  Autocomplete,
  Dropdown,
  DropdownMenu,
  DropdownItem,
  Menu,
  Submenu,
  MenuItem,
  MenuItemGroup,
  Input,
  InputNumber,
  Radio,
  RadioGroup,
  RadioButton,
  Checkbox,
  CheckboxButton,
  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,
  Badge,
  Card,
  Rate,
  Steps,
  Step,
  Carousel,
  CarouselItem,
  Collapse,
  CollapseItem,
  Cascader,
  ColorPicker,
  Transfer,
  Container,
  Header,
  Aside,
  Main,
  Footer,
  Loading,
  MessageBox,
  Message,
  Notification
} 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(CheckboxButton);
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(Badge);
Vue.use(Card);
Vue.use(Rate);
Vue.use(Steps);
Vue.use(Step);
Vue.use(Carousel);
Vue.use(CarouselItem);
Vue.use(Collapse);
Vue.use(CollapseItem);
Vue.use(Cascader);
Vue.use(ColorPicker);
Vue.use(Transfer);
Vue.use(Container);
Vue.use(Header);
Vue.use(Aside);
Vue.use(Main);
Vue.use(Footer);
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;
发布了16 篇原创文章 · 获赞 5 · 访问量 6388

猜你喜欢

转载自blog.csdn.net/heyNewbie/article/details/103870996