<p>$route 当前组件路由</p><p>$route.fullpath()</p><p>$route.path()</p><p>$route.query()<br/></p><p><br/></p><p>$router 全局组件路由</p><p>$router.path()</p><p>$router.push({path,query})</p><p>$router.go()</p><p><br/></p><p>topage(path:'',query:{})</p>
2023-08-110个赞
<p><span style="font-size: 14px;">路径带参数</span></p><p><span style="font-size: 14px;">path:'/home/:id'</span></p><p><span style="font-size: 14px;">全局路由接收:$route.params.id</span></p><p><br/></p><p><br/></p>
2023-08-110个赞
<p><span style="font-size: 10px;">嵌套路由</span></p><p><span style="font-size: 10px;">{</span></p><p><span style="font-size: 10px;"> path:'/home',<br/></span></p><p><span style="font-size: 10px;"> name:'home',<br/></span></p><p><span style="font-size: 10px;"> compnonet:Home,<br/></span></p><p><span style="font-size: 10px;"> children:[</span></p><p><span style="font-size: 10px;"> {</span></p><p><span style="font-size: 10px;"> path:'order/:id',<br/></span></p><p><span style="font-size: 10px;"> name:'order',<br/></span></p><p><span style="font-size: 10px;"> compnont:Order<br/></span></p><p><span style="font-size: 10px;"> }, </span></p><p style="text-wrap: wrap;"><span style="font-size: 10px;"> {</span></p><p style="text-wrap: wrap;"><span style="font-size: 10px;"> path:'cart',<br/></span></p><p style="text-wrap: wrap;"><span style="font-size: 10px;"> name:'cart',<br/></span></p><p style="text-wrap: wrap;"><span style="font-size: 10px;"> compnont:Cart<br/></span></p><p style="text-wrap: wrap;"><span style="font-size: 10px;"> },</span></p><p><span style="font-size: 10px;"> ]<br/></span></p><p><span style="font-size: 10px;">}<br/></span></p><p><span style="font-size: 10px;"><br/></span></p><p><span style="font-size: 10px;">选中状态</span></p><p><span style="font-size: 10px;"><a :class="{active:$route.path=='/home/order'}" href="/home/order">我的订单</a></span></p><p><span style="font-size: 10px;"><span style="font-size: 10px; text-wrap: wrap;"><a :class="{active:$route.path=='/home/cart'}" href="/home/cart">我的购物车</a></span></span></p><p><span style="font-size: 10px;"><span style="font-size: 10px; text-wrap: wrap;"><br/></span></span></p><p><span style="font-size: 10px;"><style></span></p><p><span style="font-size: 10px;">.active{</span></p><p><span style="font-size: 10px;"> color:red;<br/></span></p><p><span style="font-size: 10px;">}</span></p><p><span style="font-size: 10px;"></style></span></p>
2023-08-110个赞
<pre class="brush:js;toolbar:false">//隐藏图片 document.querySelector('.vb-a').style.display='none'</pre><p>别名<span style="font-size: 10px;"></span><br/></p><p><span style="font-size: 10px;">{</span></p><p><span style="font-size: 10px;"> path:'/',<br/></span></p><p><span style="font-size: 10px;"> name:'home',</span></p><p><span style="font-size: 10px;"> component:Home,<br/></span></p><p><span style="font-size: 10px;"> alias:['/a','/b','/c']<br/></span></p><p><span style="font-size: 10px;">}</span></p><p><br/></p><p>导航守卫=》前置,后置</p><p><span style="font-size: 14px;">前置作用:跳转页面前,判断权限后跳转</span></p><p><span style="font-size: 14px;"><span style="text-wrap: wrap;"></span></span></p><pre class="brush:js;toolbar:false">router.beforeEach((to,from)=>{ });</pre><p><span style="font-size: 14px;"><span style="text-wrap: wrap;"></span></span><br/></p><p>后置作用:优化</p><p><span style="font-size: 14px;"></span></p><pre class="brush:js;toolbar:false">router.afterEach((to,from)=>{ })</pre><p><span style="font-size: 14px;"></span><br/></p><p><br/></p><p><br/></p>
2023-08-110个赞
<p>导航守卫</p><pre class="brush:js;toolbar:false">//路由页面设置meta信息,设置页面title const routes = { path:'/home', name:'home', component:Home, meta:{ title:'首页' } } //路由设置后置守卫 router.beforeEach((to,from)=>{ //console.log(to.path) }) router.afterEach((to,from)=>{ //跳转前设置title document.title = to.meta.title })</pre><p><br/></p>
2023-08-110个赞
<p><strong>Vuex 状态管理</strong></p><p><span style="font-size: 14px;">全局数据共享,用于多个页面级组件,不用反复请求,比如登录信息,购物车数量......</span></p>
2023-08-110个赞
<p>vuex<br/></p><pre class="brush:js;toolbar:false">state 相当于单个组件内的 data getter 相当于单个组件内的 computed</pre><p><br/></p><pre class="brush:js;toolbar:false">// store/index.js下配置全局data数据 state:{ st_str:'hello', st_num:100, st_arr:[1,2,3], st_obj:{name:'张三',age:18}, st_flag:false }</pre><p>创建后,所有组件内this.$store都可以访问到数据,而且是响应式。<br/></p>
2023-08-110个赞
<p>vuex 里面getters的方法</p><pre class="brush:js;toolbar:false">state:{ st_num:10, } //把state作为参数传入方法内 getters:{ st_num_pow(state){ return state.st_num * state.st_num } }</pre><p>其他组件就使用vuex内getters的方法<br/></p><pre class="brush:js;toolbar:false">{{ $store.getters.st_num_pow }}</pre><p><br/></p>
2023-08-110个赞
<p><strong>vuex 里面的操作方法</strong></p><p><span style="font-size: 14px;">在mutations里添加</span></p><pre class="brush:js;toolbar:false">mutations{ mu_add(state,payload){ console.log(payload.str) state.st_num+=payload.n } }</pre><p><span style="font-size: 14px;">组件使用 commit方法调用,commit()方法只能传2个参数,第一个为state</span><br/></p><pre class="brush:js;toolbar:false">$store.commit('mu_add')</pre><p><span style="font-size: 14px;">组件传参,只允许传2个参数,必须包含一个state,想要传多个,可以包装成对象形式</span></p><pre class="brush:js;toolbar:false">add(){ const payload = {n:5,str:'hello'} this.$store.commit('mu_add',payload) }</pre><p><span style="font-size: 14px;"></span><br/></p>
2023-08-120个赞
<p><strong>vuex actions的异步操作</strong></p><p><span style="font-size: 14px;">actions要最先处理,所以得操作所有的数据,里面的第一个参数,得包含state,getters,commit,第一个参数用context(上下文)</span><strong><br/></strong></p><pre class="brush:js;toolbar:false">actions:{ ac_add(context,payload){ context.commit('mu_add',payload) comtext.getters.st_add_pow } }</pre><p><span style="font-size: 14px;">为了简便,context参数,可以直接解构成{state,commit,getters}</span><br/></p><pre class="brush:js;toolbar:false">actions:{ ac_add({state,commit,getters},padload){ commit('mu_add',payload) getters.st_add_pow } }</pre><p><span style="font-size: 14px;"></span><br/></p>
2023-08-120个赞
<p><strong>模块化</strong></p><p>可以按功能创建多个js文件,默认导出</p><p>state.js,getters.js mutations.js actions.js moudle.js</p><pre class="brush:js;toolbar:false">//state.js export default { st_num : 100 }</pre><p>在index.js导入<br/></p><pre class="brush:js;toolbar:false">//index.js import {createStore} from 'vuex' import state from './state' import getters from './getters' import mutations from './mutations' import actions from './actions' import modules from './modules' export default createStore({ state, getters, mutations, actions, modules })</pre><p><br/></p>
2023-08-120个赞
<p><strong>组合式api</strong></p><p> <strong><br/></strong></p>
2023-08-120个赞
<p><strong>组合式api</strong></p><p>setup()在beforecreate()创建实例之前就调用了,所以获取不到this</p><p><br/></p><p>同一个组件内,使用了setup()方法,还可以使用原有的结构,data(){},methods:{},可以共存,但不建议,使用起来混乱</p>
2023-08-120个赞
<p>setup()方法里面的数据必须return出去,且必须是json格式的对象,界面才能获取到。不是响应式的。</p><pre class="brush:js;toolbar:false">setup(){ //let str = 'hello' //let num = 100 //const func = ()=>{ console.log('hello') } return { num:100, str:'hello', func } }</pre><p>原来的data()方法,也是要return界面才能获取到。</p><pre class="brush:js;toolbar:false">data(){ return { num:100, str:'hello' } }</pre><p><br/></p>
2023-08-120个赞
<p>setup()的参数有两个:props,context</p><ul class=" list-paddingleft-2" style="list-style-type: disc;"><li><p>props为父组件传过来的属性的对象</p><p><br/></p></li><li><p>context内有 attrs,slots,emit方法</p></li></ul><ol class=" list-paddingleft-2" style="list-style-type: decimal;"><li><p><span style="font-size: 14px;">attrs为props中没有声明的其他属性对象,相当于this.$attrs</span></p></li><li><p><span style="font-size: 14px;">slots为插槽内容的对象,相当于this.$slots</span></p></li><li><p><span style="font-size: 14px;">emit为发送过来的自定义时间的函数,相当于this.$emit</span></p><p><span style="font-size: 14px;"></span></p></li></ol><p>接收的参数context可以解构出来想用的参数</p><pre class="brush:js;toolbar:false">setup(props,{emit,attrs}){ }</pre><p><br/></p>
2023-08-120个赞