多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 5. 将界面交给第三方UI库 > iview官网:https://www.iviewui.com/ 为节省开发时间,我们往往会使用一些第三方ui库,比如iview elementui等 我们在这里只介绍iview,其他ui库大同小异 ### iview的安装与引入 #### 安装 ```js cnpm i iview --save ``` #### 按需引入组件 官网说,需要下载插件才能按需引入,[官网说明](https://www.iviewui.com/docs/guide/start#AXYY),但是不下好像也可以正常引入 ```js //在main.js文件中引入项目需要的组件 import {Button,Table,Message} from 'iview' //然后注册组件 Vue.component('Button',Button) Vue.component('Table',Table) Vue.component('Message',Message) ``` 这样注册的话太繁琐,所以需要优化一下 ```js //main.js import {Button,Table,Message} from 'iview' const iviewComs={Button,Table,Message} Object.keys(iviewComs).forEach(key=>{Vue.component(key,component[key])}) ``` 代码都写在main.js中显得太拥挤,我们可以把代码拿出去,写成一个插件 我们在components文件夹中新建一个文件`iview-coms`,用来放iview中引入的组件 ```js //components/iview-coms.js import {Button,Table,Message} from 'iview' const components={Button,Table,Message} const install = function(Vue, opts = {}){ Object.keys(components).forEach(key=>{ Vue.component(key,components[key]) }) } export default install ``` 然后在main.js中引入,`use`这个插件 ```js import iviewComs from './components/iview-coms' Vue.use(iviewComs) ``` ok了,接下来看自定义主题 ####自定义主题 官网链接:https://www.iviewui.com/docs/guide/theme 原理很简单,就是把ivew的less文件引入,并且覆盖掉,然后在main.js文件中引入自己的less文件 首先,我们需要下载解析less文件的loader ,`less`和`less-loader`,这里有个坑,下载less的时候要下载3版本以下的,不然会报一堆错误 ```shell cnpm i less@2.7.2 less-loader -D ``` 下载完就ok了,不需要在webpack中进行配置,因为已经配置好了 然后,在assets/styles/base.less(没有需要自己新建)中,引入iview的样式文件,并且覆盖掉 默认变量列表:https://github.com/iview/iview/blob/2.0/src/styles/custom.less ```js //assets/styles/base.less //------ 引入iview样式 @import '~iview/src/styles/index.less'; //------ 覆盖iview的样式 @primary-color: #E91E63; @error-color : #FF3300; ``` 最后在main.js引入该less文件 ```js //main.js import './assets/styles/base.less' ``` 此时,引入的组件就可以在.vue文件中使用了,看一下效果: ![image-20190307150805499](https://ws4.sinaimg.cn/large/006tKfTcgy1g0u8x22wqzj30gr07v74b.jpg) ok了。最后还要补充一下,在项目开发过程中,不可避免的要覆盖iview默认的样式,我们分为两种情况,一种是全局覆盖,一种是局部覆盖。 全局覆盖的话我们要新建一个less文件,比如叫`cover-iview.less`所有覆盖iview样式的代码都放在这里,然后在base.less中引入这个文件。 局部覆盖的话要注意不要影响到别的样式,所以要充分利用less的作用域,例如我们只需要改home页面下的iview按钮样式,我们可以这样: ```less .home{ .ivu-btn{ } } ```