做装修效果图的网站有哪些软件下载,海口公司做网站,网站改版建议书,住房和城乡建设部官网目录 
1.vue脚手架配置代理 
1.1 方法一 
1.2 方法二 
2.插槽 
2.1 默认插槽 
2.2 具名插槽 
2.3 作用域插槽 
3.Vuex 
3.1 概念 
3.2 何时使用#xff1f; 
3.3 搭建vuex环境 
3.4 基本使用 
3.5 getters的使用 
3.6 四个map方法的使用 
3.6.1 mapState方法 
3.6.2 mapGetter…目录 
1.vue脚手架配置代理 
1.1 方法一 
1.2 方法二 
2.插槽 
2.1 默认插槽 
2.2 具名插槽 
2.3 作用域插槽 
3.Vuex 
3.1 概念 
3.2 何时使用 
3.3 搭建vuex环境 
3.4 基本使用 
3.5 getters的使用 
3.6 四个map方法的使用 
3.6.1 mapState方法 
3.6.2 mapGetters方法 
3.6.3 mapActions方法 
3.7 模块化命名空间 
4.路由 
1.基本使用 
2.几个注意点 
3.多级路由多级路由 
4.路由的query参数 
5.命名路由 
6.路由的params参数 
7.路由的props配置 
8.的replace属性 
9.编程式路由导航 
10.缓存路由组件 
11.两个新的生命周期钩子 
12.路由守卫 
13.路由器的两种工作模式 
5.ElementUi组件库的使用 
1.首先安装element-ui插件库 
2.引入 Element 
2.1 一般引入 
2.2 按需引入 1.vue脚手架配置代理 1.1 方法一 在vue.config.js中添加如下配置 
devServer:{proxy:http://localhost:5000
} 
说明 优点配置简单请求资源时直接发给前端8080即可。  缺点不能配置多个代理不能灵活的控制请求是否走代理。如果路径上有8080本身的文件时就会访问该文件而不会选择代理。  工作方式若按照上述配置代理当请求了前端不存在的资源时那么该请求会转发给服务器 优先匹配前端资源  1.2 方法二 编写vue.config.js配置具体代理规则 
module.exports  {devServer: {proxy: {/api1: {// 匹配所有以 /api1开头的请求路径target: http://localhost:5000,// 代理目标的基础路径changeOrigin: true,pathRewrite: {^/api1: }},/api2: {// 匹配所有以 /api2开头的请求路径target: http://localhost:5001,// 代理目标的基础路径changeOrigin: true,pathRewrite: {^/api2: }}}}
}
/*changeOrigin设置为true时服务器收到的请求头中的host为localhost:5000changeOrigin设置为false时服务器收到的请求头中的host为localhost:8080changeOrigin默认值为true
*/ 说明 优点可以配置多个代理且可以灵活的控制请求是否走代理。  缺点配置略微繁琐请求资源时必须加前缀。  2.插槽 作用让父组件可以向子组件指定位置插入html结构也是一种组件间通信的方式适用于 父组件  子组件 。 
分类默认插槽、具名插槽、作用域插槽 2.1 默认插槽 示例代码 
父组件中Categorydivhtml结构1/div/Category子组件中templatediv!-- 定义插槽 --slot插槽默认内容.../slot/div/template 2.2 具名插槽 示例代码 
父组件中Categorytemplate slotcenterdivhtml结构1/div/template!-- template slotfooter --template v-slot:footerdivhtml结构2/div/template/Category子组件中templatediv!-- 定义插槽 --slot namecenter插槽默认内容.../slotslot namefooter插槽默认内容.../slot/div/template 2.3 作用域插槽 理解数据在组件插槽的自身但根据数据生成的结构需要组件的使用者来决定。games数据在Category组件中但使用数据所遍历出来的结构由App组件决定 示例代码 
父组件中Categorytemplate scopescopeData!-- 生成的是ul列表 --ulli v-forg in scopeData.games :keyg{{g}}/li/ul/template/CategoryCategorytemplate slot-scopescopeData!-- 生成的是h4标题 --h4 v-forg in scopeData.games :keyg{{g}}/h4/template/Category子组件中templatedivslot :gamesgames/slot/div/templatescriptexport default {name:Category,props:[title],//数据在子组件自身data() {return {games:[红色警戒,穿越火线,劲舞团,超级玛丽]}},}/script 3.Vuex 3.1 概念 在Vue中实现集中式状态数据管理的一个Vue插件对vue应用中多个组件的共享状态进行集中式的管理读/写也是一种组件间通信的方式且适用于任意组件间通信。 
Vue2必须下载Vuex3下载 npm i vuex3 3.2 何时使用 
多个组件需要共享数据时 3.3 搭建vuex环境 创建文件src/store/index.js //引入Vue核心库
import Vue from vue
//引入Vuex
import Vuex from vuex
//应用Vuex插件
Vue.use(Vuex)
//准备actions对象——响应组件中用户的动作
const actions  {}
//准备mutations对象——修改state中的数据
const mutations  {}
//准备state对象——保存具体的数据
const state  {}
//创建并暴露store
export default new Vuex.Store({actions,mutations,state
})   在main.js中创建vm时传入store配置项 ......
//引入store
import store from ./store
......
//创建vm
new Vue({el:#app,render: h  h(App),store
})   
3.4 基本使用 初始化数据、配置actions、配置mutations操作文件store.js //引入Vue核心库
import Vue from vue
//引入Vuex
import Vuex from vuex
//引用Vuex
Vue.use(Vuex)
const actions  {//响应组件中加的动作jia(context,value){// console.log(actions中的jia被调用了,miniStore,value)context.commit(JIA,value)},
}
const mutations  {//执行加JIA(state,value){// console.log(mutations中的JIA被调用了,state,value)state.sum  value}
}
//初始化数据
const state  {sum:0
}
//注意要创建并暴露store
export default new Vuex.Store({actions,mutations,state,
})   组件中读取vuex中的数据$store.state.sum  3.5 getters的使用 概念当state中的数据需要经过加工后再使用时可以使用getters加工。虽然计算属性也可以实现但是这种方法可以多个组件进行调用。  在store.js中追加getters配置  组件中读取数据$store.getters.bigSum  代码演示 
......const getters  {bigSum(state){return state.sum * 10}
}//创建并暴露store
export default new Vuex.Store({......getters
}) 3.6 四个map方法的使用 3.6.1 mapState方法 用于帮助我们映射state中的数据为计算属性本来要在模版 {{ $store.state.subject }}写成计算属性只需 {{ subject }} 看起来更简洁 
computed: {//借助mapState生成计算属性sum、school、subject对象写法...mapState({sum:sum,school:school,subject:subject}),//借助mapState生成计算属性sum、school、subject数组写法...mapState([sum,school,subject]),
}, 注意事项 问题为什么mapState前面需要用到...扩展运算符 原因 
mapState 返回一个对象mapState({sum:sum,school:school,subject:subject}) 会返回一个对象这个对象的键是 sum、school 和 subject值是从 Vuex store 中对应的状态。加上扩展运算符可以将对象的键和值加到computed身上。。 3.6.2 mapGetters方法 用于帮助我们映射getters中的数据为计算属性本来要在模版 {{ $store.getters.bigSum }}写成计算属性只需 {{ bigSum }} 看起来更简洁 
computed: {//借助mapGetters生成计算属性bigSum对象写法...mapGetters({bigSum:bigSum}),//借助mapGetters生成计算属性bigSum数组写法...mapGetters([bigSum])
}, 3.6.3 mapActions方法 用于帮助我们生成与actions对话的方法即包含$store.dispatch(xxx)的函数 
methods:{//靠mapActions生成incrementOdd、incrementWait对象形式...mapActions({incrementOdd:jiaOdd,incrementWait:jiaWait})//靠mapActions生成incrementOdd、incrementWait数组形式...mapActions([jiaOdd,jiaWait])
} 本来需要这样写 
incrementOdd(){this.$store.dispatch(odd,this.n)
}, 
简化后 
...mapActions({incrementOdd : odd}), 注意事项 有参数必须在调用的时候传不然收到的会是一个事件对象。。 3.6.4 mapMutations方法 用于帮助我们生成与mutations对话的方法即包含$store.commit(xxx)的函数 
methods:{//靠mapActions生成increment、decrement对象形式...mapMutations({increment:JIA,decrement:JIAN}),//靠mapMutations生成JIA、JIAN对象形式...mapMutations([JIA,JIAN]),
} 注意事项mapActions与mapMutations使用时若需要传递参数需要在模板中绑定事件时传递好参数否则参数是事件对象。 3.7 模块化命名空间 1.目的让代码更好维护让多种数据分类更加明确。 
2.修改store.js 
const countAbout  {namespaced:true,//开启命名空间state:{x:1},mutations: { ... },actions: { ... },getters: {bigSum(state){return state.sum * 10}}
}const personAbout  {namespaced:true,//开启命名空间state:{ ... },mutations: { ... },actions: { ... }
}const store  new Vuex.Store({modules: {countAbout,personAbout}
})3.开启命名空间后组件中读取state数据 
//方式一自己直接读取
this.$store.state.personAbout.list
//方式二借助mapState读取
...mapState(countAbout,[sum,school,subject]), 4.开启命名空间后组件中读取getters数据 
//方式一自己直接读取
this.$store.getters[personAbout/firstPersonName]
//方式二借助mapGetters读取
...mapGetters(countAbout,[bigSum]) 5.开启命名空间后组件中调用dispatch 
//方式一自己直接dispatch
this.$store.dispatch(personAbout/addPersonWang,person)
//方式二借助mapActions
...mapActions(countAbout,{incrementOdd:jiaOdd,incrementWait:jiaWait}) 6.开启命名空间后组件中调用commit 
//方式一自己直接commit
this.$store.commit(personAbout/ADD_PERSON,person)
//方式二借助mapMutations
...mapMutations(countAbout,{increment:JIA,decrement:JIAN}), 注意事项 
引入模块化之后模版要改进成下面 
$store.state.sum 
$store.state.countAbout.sum 4.路由 理解 一个路由route就是一组映射关系key - value多个路由需要路由器router进行管理。 
前端路由key是路径value是组件。 1.基本使用 安装vue-router命令npm i vue-router3  引入VueRouter并且应用插件Vue.use(VueRouter)  编写router配置项: //引入VueRouter
import VueRouter from vue-router
//引入Luyou 组件
import About from ../components/About
import Home from ../components/Home
//创建router实例对象去管理一组一组的路由规则
const router  new VueRouter({routes:[{path:/about,component:About},{path:/home,component:Home}]
})
//暴露router
export default router   实现切换active-class可配置高亮样式 router-link active-classactive to/aboutAbout/router-link   指定展示位置 router-view/router-view   
2.几个注意点 路由组件通常存放在pages文件夹一般组件通常存放在components文件夹。  通过切换“隐藏”了的路由组件默认是被销毁掉的需要的时候再去挂载。  每个组件都有自己的$route属性里面存储着自己的路由信息。  整个应用只有一个router可以通过组件的$router属性获取到。  3.多级路由多级路由 1.配置路由规则使用children配置项 
routes:[{path:/about,component:About,},{path:/home,component:Home,children:[ //通过children配置子级路由{path:news, //此处一定不要写/newscomponent:News},{path:message,//此处一定不要写/messagecomponent:Message}]}
] 2.跳转要写完整路径 
router-link to/home/newsNews/router-link 注意事项二级路由开始的路径最好不要用 / 4.路由的query参数 $route.query.id
$route.query.title 
1.传递参数 
!-- 跳转并携带query参数to的字符串写法 --
router-link :to/home/message/detail?id666title你好跳转/router-link!-- 跳转并携带query参数to的对象写法 --
router-link :to{path:/home/message/detail,query:{id:666,title:你好}}
跳转/router-link 2.接收参数 
$route.query.id
$route.query.title 5.命名路由 1.作用可以简化路由的跳转。 
2.如何使用 
给路由命名  {path:/demo,component:Demo,children:[{path:test,component:Test,children:[{name:hello //给路由命名path:welcome,component:Hello,}]}]
}  简化跳转  !--简化前需要写完整的路径 --
router-link to/demo/test/welcome跳转/router-link!--简化后直接通过名字跳转 --
router-link :to{name:hello}跳转/router-link!--简化写法配合传递参数 --
router-link :to{name:hello,query:{id:666,title:你好}}
跳转/router-link   6.路由的params参数 params携带参数也就是Restful风格的写法 1.配置路由声明接收params参数 
{path:/home,component:Home,children:[{path:news,component:News},{component:Message,children:[{name:xiangqing,path:detail/:id/:title, //使用占位符声明接收params参数component:Detail}]}]
} 2.传递参数 
!-- 跳转并携带params参数to的字符串写法 --
router-link :to/home/message/detail/666/你好跳转/router-link!-- 跳转并携带params参数to的对象写法 --
router-link :to{name:xiangqing,params:{id:666,title:你好}}
跳转/router-link 特别注意 
路由携带params参数时若使用to的对象写法则不能使用path配置项必须使用name配置params配置的参数需要在路由器中占位 3.接收参数 
$route.params.id
$route.params.title 7.路由的props配置 作用让路由组件更方便的收到参数 
{name:xiangqing,path:detail/:id,component:Detail,//第一种写法props值为对象该对象中所有的key-value的组合最终都会通过props传给Detail组件// props:{a:900}//第二种写法props值为布尔值布尔值为true则把路由收到的所有params参数通过props传给Detail组件// props:true//第三种写法props值为函数该函数返回的对象中每一组key-value都会通过props传给Detail组件props(route){return {id:route.query.id,title:route.query.title}}
} 三种写法 
第一种写法props值为对象该对象中所有的key-value的组合最终都会通过props传给Detail组件第二种写法props值为布尔值布尔值为true则把路由收到的所有params参数通过props传给Detail第三种写法props值为函数该函数返回的对象中每一组key-value都会通过props传给Detail组件 注意事项 
1.第一种写法传的数据都是死数据所以基本不使用 
2.第二种写法只适合传 params参数不能传 query参数 
3.第三种写法是一个回调函数路由器会调用该方法并且传该组件的 $route 作为参数 8.router-link的replace属性 1.作用控制路由跳转时操作浏览器历史记录的模式(也就是后退和前进) 可以实现无痕浏览 
2.浏览器的历史记录有两种写入方式分别为push和replacepush是追加历史记录replace是替换当前记录。路由跳转时候默认为push。 
3.如何开启replace模式router-link replace .......News/router-link 
注意事项replace的完整写法是 :replacetrue 
原理 9.编程式路由导航 1.作用不借助router-link实现路由跳转to让路由跳转更加灵活 
2.具体编码 
//$router的两个API
this.$router.push({name:xiangqing,params:{id:xxx,title:xxx}
})this.$router.replace({name:xiangqing,params:{id:xxx,title:xxx}
})this.$router.forward() //页面前进
this.$router.back() //页面后退
this.$router.go(params) //params为2表示前进2步-2表示后退两步 10.缓存路由组件 1.作用切换不同的路由默认之前的路由是会被销毁的。为了让路由组件保持挂载不被销毁以下做法可以实现。 2.具体编码 // include值是组件名如果没有配置include就默认缓存所有组件
keep-alive includeNews router-view/router-view
/keep-alive 3.使用场景 
例如在input框输入了一些信息然后要切到另外一个组件回来发现之前输入的信息不见了是因为组件在切换时就会被销毁此时就可以设置该组件处于活跃状态就不会被销毁。 4.如果想缓存多个路由 
keep-alive :include[NewsXxx] 11.两个新的生命周期钩子 作用路由组件所独有的两个钩子用于捕获路由组件的激活状态。  具体名字  activated路由组件被激活时触发。  deactivated路由组件失活时触发。  
activated当一个 keep-alive 组件被激活时触发。这个钩子在组件从缓存中恢复时调用通常用于恢复组件的状态或执行一些需要在组件激活时进行的操作。deactivated当一个 keep-alive 组件失活时触发。这个钩子在组件被缓存时调用通常用于清理组件的状态或执行一些需要在组件失活时进行的操作。 注意事项】 
拥有这两个生命周期的条件 
该路由组件被keep-alive修饰。 12.路由守卫 作用对路由进行权限控制  分类全局守卫、独享守卫、组件内守卫  全局守卫: //全局前置守卫初始化时执行、每次路由切换前执行
router.beforeEach((to,from,next){console.log(beforeEach,to,from)if(to.meta.isAuth){ //判断当前路由是否需要进行权限控制if(localStorage.getItem(school)  atguigu){ //权限控制的具体规则next() //放行}else{alert(暂无权限查看)// next({name:guanyu})}}else{next() //放行}
})//全局后置守卫初始化时执行、每次路由切换后执行
router.afterEach((to,from){console.log(afterEach,to,from)if(to.meta.title){ document.title  to.meta.title //修改网页的title}else{document.title  vue_test}
})// 向外暴露配置好的路由器
export default router  独享守卫:   只有beforeEnter。在配置路由里面写 beforeEnter(to,from,next){console.log(beforeEnter,to,from)if(to.meta.isAuth){ //判断当前路由是否需要进行权限控制if(localStorage.getItem(school)  atguigu){next()}else{alert(暂无权限查看)// next({name:guanyu})}}else{next()}
}  组件内守卫 //进入守卫通过路由规则进入该组件时被调用
beforeRouteEnter (to, from, next) {
},
//离开守卫通过路由规则离开该组件时被调用
beforeRouteLeave (to, from, next) {
}  13.路由器的两种工作模式 对于一个url来说什么是hash值—— #及其后面的内容就是hash值。  hash值不会包含在 HTTP 请求中即hash值不会带给服务器。  hash模式  地址中永远带着#号不美观 。  若以后将地址通过第三方手机app分享若app校验严格则地址会被标记为不合法。  兼容性较好。  history模式  地址干净美观 。  兼容性和hash模式相比略差。  应用部署上线时需要后端人员支持解决刷新页面服务端404的问题。  5.ElementUi组件库的使用 ElementUi官网https://element.eleme.cn/#/zh-CN/component/quickstart 1.首先安装element-ui插件库 
npm i element-ui -S 2.引入 Element 2.1 一般引入 在 main.js 中写入以下内容   
import ElementUI from element-ui;import element-ui/lib/theme-chalk/index.css;Vue.use(ElementUI); 注意事项上面这种引入方式比较暴力直接把全部的CSS和组件都引入会导致所占的空间比较大。 
改进方法就是按需引入 2.2 按需引入 1.首先安装 babel-plugin-component 
npm install babel-plugin-component -D 2.然后将 .babel.config.js 修改为 module.exports  {presets: [vue/cli-plugin-babel/preset,[babel/preset-env, { modules: false }]],plugins: [[component,{libraryName: element-ui,styleLibraryName: theme-chalk}]]
}3.接下来如果你只希望引入部分组件比如 Button 和 Select那么需要在 main.js 中写入以下内容 
使用以下组件 main.js引入部分组件不需要引入CSS因为自动会引入所需的部分 
import { DatePicker, Dropdown, DropdownMenu, DropdownItem } from element-ui;Vue.component(DatePicker.name, DatePicker);
Vue.component(Dropdown.name, Dropdown);
Vue.component(DropdownMenu.name, DropdownMenu);
Vue.component(DropdownItem.name, DropdownItem); 
 文章转载自: http://www.morning.qtnmp.cn.gov.cn.qtnmp.cn http://www.morning.nrchx.cn.gov.cn.nrchx.cn http://www.morning.twwzk.cn.gov.cn.twwzk.cn http://www.morning.hwprz.cn.gov.cn.hwprz.cn http://www.morning.qggcc.cn.gov.cn.qggcc.cn http://www.morning.gmztd.cn.gov.cn.gmztd.cn http://www.morning.rmxgk.cn.gov.cn.rmxgk.cn http://www.morning.zlnyk.cn.gov.cn.zlnyk.cn http://www.morning.zqybs.cn.gov.cn.zqybs.cn http://www.morning.ftldl.cn.gov.cn.ftldl.cn http://www.morning.gjzwj.cn.gov.cn.gjzwj.cn http://www.morning.txqsm.cn.gov.cn.txqsm.cn http://www.morning.zkqwk.cn.gov.cn.zkqwk.cn http://www.morning.ryxdf.cn.gov.cn.ryxdf.cn http://www.morning.qrgfw.cn.gov.cn.qrgfw.cn http://www.morning.qwnqt.cn.gov.cn.qwnqt.cn http://www.morning.phjny.cn.gov.cn.phjny.cn http://www.morning.fnjrh.cn.gov.cn.fnjrh.cn http://www.morning.ghryk.cn.gov.cn.ghryk.cn http://www.morning.ypfw.cn.gov.cn.ypfw.cn http://www.morning.rkqkb.cn.gov.cn.rkqkb.cn http://www.morning.dtlnz.cn.gov.cn.dtlnz.cn http://www.morning.qdbcd.cn.gov.cn.qdbcd.cn http://www.morning.jggr.cn.gov.cn.jggr.cn http://www.morning.nkjxn.cn.gov.cn.nkjxn.cn http://www.morning.lwqst.cn.gov.cn.lwqst.cn http://www.morning.wqcbr.cn.gov.cn.wqcbr.cn http://www.morning.txhls.cn.gov.cn.txhls.cn http://www.morning.kflbf.cn.gov.cn.kflbf.cn http://www.morning.fpjw.cn.gov.cn.fpjw.cn http://www.morning.fwkpp.cn.gov.cn.fwkpp.cn http://www.morning.lzwfg.cn.gov.cn.lzwfg.cn http://www.morning.rfqk.cn.gov.cn.rfqk.cn http://www.morning.tnkwj.cn.gov.cn.tnkwj.cn http://www.morning.sgjw.cn.gov.cn.sgjw.cn http://www.morning.rydbs.cn.gov.cn.rydbs.cn http://www.morning.jqwpw.cn.gov.cn.jqwpw.cn http://www.morning.dmxzd.cn.gov.cn.dmxzd.cn http://www.morning.hxwrs.cn.gov.cn.hxwrs.cn http://www.morning.ldhbs.cn.gov.cn.ldhbs.cn http://www.morning.clccg.cn.gov.cn.clccg.cn http://www.morning.wjtwn.cn.gov.cn.wjtwn.cn http://www.morning.ympcj.cn.gov.cn.ympcj.cn http://www.morning.rcttz.cn.gov.cn.rcttz.cn http://www.morning.yfnhg.cn.gov.cn.yfnhg.cn http://www.morning.wkgyz.cn.gov.cn.wkgyz.cn http://www.morning.ljqd.cn.gov.cn.ljqd.cn http://www.morning.wnjbn.cn.gov.cn.wnjbn.cn http://www.morning.bhgnj.cn.gov.cn.bhgnj.cn http://www.morning.ysfj.cn.gov.cn.ysfj.cn http://www.morning.yzfrh.cn.gov.cn.yzfrh.cn http://www.morning.ykxnp.cn.gov.cn.ykxnp.cn http://www.morning.lpzqd.cn.gov.cn.lpzqd.cn http://www.morning.ngkng.cn.gov.cn.ngkng.cn http://www.morning.xprzq.cn.gov.cn.xprzq.cn http://www.morning.kgjyy.cn.gov.cn.kgjyy.cn http://www.morning.ghyfm.cn.gov.cn.ghyfm.cn http://www.morning.qqzdr.cn.gov.cn.qqzdr.cn http://www.morning.ljdtn.cn.gov.cn.ljdtn.cn http://www.morning.tfpqd.cn.gov.cn.tfpqd.cn http://www.morning.thbkc.cn.gov.cn.thbkc.cn http://www.morning.mltsc.cn.gov.cn.mltsc.cn http://www.morning.rntgy.cn.gov.cn.rntgy.cn http://www.morning.zsyrk.cn.gov.cn.zsyrk.cn http://www.morning.gqdsm.cn.gov.cn.gqdsm.cn http://www.morning.ypklb.cn.gov.cn.ypklb.cn http://www.morning.xsqbx.cn.gov.cn.xsqbx.cn http://www.morning.ypnxq.cn.gov.cn.ypnxq.cn http://www.morning.wmdqc.com.gov.cn.wmdqc.com http://www.morning.qnjcx.cn.gov.cn.qnjcx.cn http://www.morning.jhqcr.cn.gov.cn.jhqcr.cn http://www.morning.nj-ruike.cn.gov.cn.nj-ruike.cn http://www.morning.mspqw.cn.gov.cn.mspqw.cn http://www.morning.wsnbg.cn.gov.cn.wsnbg.cn http://www.morning.tkrwm.cn.gov.cn.tkrwm.cn http://www.morning.xhlht.cn.gov.cn.xhlht.cn http://www.morning.rghkg.cn.gov.cn.rghkg.cn http://www.morning.kjmcq.cn.gov.cn.kjmcq.cn http://www.morning.mdnnz.cn.gov.cn.mdnnz.cn http://www.morning.lxngn.cn.gov.cn.lxngn.cn