web服务器:
TOMCAT java html
APache PHP html java
IIS asp 和 asp.net
undowtow java
nodejs 它可以部署web服务器
nginx html php 部署前端,比较流行的一个web服务器
启动 CD到nginx目录 执行 nginx 或者 start nginx 或者 直接运行nginx.exe
关闭 nginx -s stop 或 任务管理器 ctrl+alt+esc
location / {
root E:/桌面/前端培训/code/vuecli项目/dist;
index index.html index.htm;
}
加入win全局变量:将nginx的目录路径添加到Path中。开启nginx服务需用start nginx。
在HbuilderX的项目管理器项目目录上,右键执行“使用命令行窗口打开所在目录”,在终端里输入:
npm view vue-router versions
npm install [email protected]
npm install vue-router@3 安装大版本3下的最高版本
官网的命令,默认时安装Vue-router4的版本,会报错。npm install vue-router@4
安装完毕后,在node_modules文件夹里会有一个vue-router文件夹。index.js里export导出了
main.js
import Vue from 'vue'
import App from './App.vue'
// 引入vue router
import VueRouter from 'vue-router'
// 使用router
Vue.use(VueRouter)
Vue.config.productionTip = false
import HelloWorld from './components/HelloWorld.vue'
import NavList from './components/NavList.vue'
import Header1 from './components/header.vue'
// 定义路由
const router = new VueRouter({
routes: [{
path: '/helloworld',
component: HelloWorld
}
]
})
// 挂载属性
new Vue({
router,
render: h => h(App),
}).$mount('#app')
hellowrld的跳转
有时,通过一个名称来标识一个路由显得更方便,特别是在链接一个路由,或者是执行一些跳转时。可以在创建Router实例时,在routes
配置中给某个路由设置名称
const router = new VueRouter({
routes: [
{
path: '/user/name/profile/out',
name: 'user',
component: User
}
]
})
要链接到一个命名路由,可以给 router-link
的 to
属性传一个对象:
User
这跟代码调用 router.push()
是一回事
router.push({ name: 'user', params: { userId: 123 }})
这两种方式都会把路由导航到 /user/123
路径
命名路由的常见用途是替换router-link中的to属性,如果不使用命名路由,由router-link中的to属性需要设置全路径,不够灵活,且修改时较麻烦。使用命名路由,只需要使用包含name属性的对象即可
[注意]如果设置了默认子路由,则不要在父级路由上设置name属性
<div id="app">
<p>
<router-link to="/" exact>index</router-link>
<router-link :to="{ name: 'foo1' }">Go to Foo</router-link>
<router-link :to="{ name: 'bar' }">Go to Bar</router-link>
</p>
<router-view></router-view>
</div>
const Home = { template: 'home' }
const Foo = { template: `
to Foo1
to Foo2
to Foo3
` }
const Bar = { template: 'bar' }
const Foo1 = { template: 'Foo1' }
const Foo2 = { template: 'Foo2' }
const Foo3 = { template: 'Foo3' }
const routes = [
{ path: '/', name:'home', component: Home },
{ path: '/foo', component: Foo ,children:[
{path:'',name:'foo1', component:Foo1},
{path:'foo2',name:'foo2', component:Foo2},
{path:'foo3',name:'foo3', component:Foo3},
]},
{ path: '/bar', name:'bar', component: Bar },
]
除了使用
创建a标签来定义导航链接,还可以借助router的实例方法,通过编写代码来实现
【router.push(location)】
应用场景:需要用js来控制跳转,比如用户登录后,跳转到首页。
想要导航到不同的 URL,则使用 router.push
方法。这个方法会向 history 栈添加一个新的记录,所以,当用户点击浏览器后退按钮时,则回到之前的 URL。
history
当点击
时,这个方法会在内部调用,所以说,点击
等同于调用 router.push(...)
声明式 编程式
router.push(...)
在@click中,用 r o u t e r 表 示 路 由 对 象 , 在 m e t h o d s 方 法 中 , 用 t h i s . router表示路由对象,在methods方法中,用this. router表示路由对象,在methods方法中,用this.router表示路由对象、
goPage2() {
this.$router.push('/page2')
}
该方法的参数可以是一个字符串路径,或者一个描述地址的对象。例如:
// 字符串
router.push('home')
// 对象
router.push({ path: 'home' })
// 命名的路由
router.push({ name: 'user', params: { userId: 123 }})
// 带查询参数,变成 /register?plan=private
router.push({ path: 'register', query: { plan: 'private' }})
【router.replace(location)
】
跟 router.push
很像,唯一的不同就是,它不会向 history 添加新记录,而是跟它的方法名一样 —— 替换掉当前的 history 记录
声明式 编程式
router.replace(...)
【router.go(n)
】
这个方法的参数是一个整数,意思是在 history 记录中向前或者后退多少步,类似 window.history.go(n)
// 在浏览器记录中前进一步,等同于 history.forward()
router.go(1)
// 后退一步记录,等同于 history.back()
router.go(-1)
// 前进 3 步记录
router.go(3)
// 如果 history 记录不够用,就静默失败
router.go(-100)
router.go(100)
routes中组件定义方式:
使用import 把组件导入,然后component值为导入的名。
import HelloWorld from './components/HelloWorld.vue' component: HelloWorl
直接设置在component的值为一个匿名(箭头)函数
component: () => import('@/pages/index')
设置根路径,需要将path设置为’/’
<p>
<router-link to="/">index</router-link>
<router-link to="/foo">Go to Foo</router-link>
<router-link to="/bar">Go to Bar</router-link>
</p>
const routes = [
{ path: '/', component: Home },
{ path: '/foo', component: Foo },
{ path: '/bar', component: Bar },
]
const routes = [
{
path: '/',
component: () => import('@/pages/index')
}, {
path:'*',
component:()=> import('@/pages/404')
},
]
高亮即选中状态,给路由添加高亮的类。
new VueRouter实例化时,添加linkActiveClass属性,也可不填,默认名为router-link-active,在全局样式里填写
linkActiveClass
类型:
string
默认值:
"router-link-active"
全局配置
默认的激活的 class。
const router = new VueRouter({
linkActiveClass:'light', // 自定义高亮的类名
routes: [{
path: '/', //路径
component: Index //组件导入
},
{
name: 'abc',
path: '/page1',
component: About
},
{
path: '/page2',
component: () => import('@/pages/news')
},
{
path: '/page3',
component: Product
},
{
path: '/page4',
component: Contact
},
{
path:'*',
component:()=>import('@/pages/404')
}
]
})
利用:router-link的属性 active-class
active-class
- 类型:
string
- 默认值:
"router-link-active"
由于默认使用的是全包含匹配,即’/about’、也可以匹配到’/‘,如果需要精确匹配,仅仅匹配’/',则需要在router-link中设置exact属性
首页
关于我们
新闻中心
公司产品
联系我们
使用@import url方式
在style标签上 添加 scoped 属性,使当前样式只会在该vue页面中生效。
使用 export导出 import导入。 @表示src的根目录
导出单个:
let a = 100
export default a
导入:
import a from '@/assets/js/common.js' // a 可以自定义名
导出多个:定义成一个对象导出
let a = 100
let b = 'haha'
export {a,b}
导入:
import {a,b} from '@/assets/js/common.js' // a,b名字不可修改
console.log(a,b);
router/index.js
/*index.js 引入vue vue-router、使用、配置路由规则、实例化vue-router */
import Vue from 'vue'
import VueRouter from 'vue-router';
// 使用router
Vue.use(VueRouter)
// 解决 vue 重复点击一个路由 报错
const originalPush = VueRouter.prototype.push
VueRouter.prototype.push = function push(location) {
return originalPush.call(this, location).catch(err => err)
}
import Index from '@/pages/index.vue'
import About from '@/pages/about.vue'
import Product from '@/pages/product.vue'
import Contact from '@/pages/contact.vue'
// 配置路由规则
const routes = [{
path: '/', //路径
component: Index //组件导入
},
{
name: 'abc',
path: '/page1',
component: About
},
{
path: '/page2',
component: () => import('@/pages/news')
},
{
path: '/page3',
component: Product
},
{
path: '/page4',
component: Contact
},
{
path: '*',
component: () => import('@/pages/404')
}
]
const router = new VueRouter({
routes:routes
})
export default router
main.js
import Vue from 'vue'
import App from './App.vue'
// 引入router下的index.js 只写目录 默认会导入目录下index.js
import router from './router'
Vue.config.productionTip = false
// 挂载属性
new Vue({
router,
render: h => h(App),
}).$mount('#app')
router-link练习
pages:
首页 index 关于我们 about 新闻中心 news 公司产品 product 联系我们 contact
comonents:
头部 header 底部 footer
this.$router.push 练习
pages:
首页 index 登录页 login