├─ .eslintrc.js
├─ .gitignore
├─ dist
│ ├─ index.html
│ ├─ index.js
│ └─ index.js.map
├─ index.html
├─ package-lock.json
├─ package.json
├─ src
│ ├─ index.js
│ ├─ router.js
│ ├─ untils
│ │ └─ axios.js
│ └─ views
│ ├─ about
│ └─ home
└─ webpack.config.js
npm install eslint eslint-config-enough babel-eslint eslint-loader --save-dev
// package.json里面插入如下配置
"eslintConfig": {
"extends": "enough",
"env": {
"browser": true,
"node": true
}
}
首页
首页
// 引入 router
import router from './router'
// 启动 router
router.start()
// 引入页面文件
import home from './views/home'
import about from './views/about'
const routes = {
'/home': home,
'/about': about
}
// Router 类,用来控制页面根据当前 URL 切换
class Router {
start () {
// 点击浏览器后退 / 前进按钮时会触发 window.onpopstate 事件,我们在这时切换到相应页面
// https://developer.mozilla.org/en-US/docs/Web/Events/popstate
window.addEventListener('popstate', () => {
this.load(window.location.pathname)
})
// 打开页面时加载当前页面
this.load(window.location.pathname)
}
// 前往 path,变更地址栏 URL,并加载相应页面
go (path) {
// 变更地址栏 URL
window.history.pushState({}, '', path)
// 加载页面
this.load(path)
}
// 加载 path 路径的页面
load (path) {
// 首页
if (path === '/') path = '/home'
// 创建页面实例
const view = new routes[path]()
// 调用页面方法,把页面加载到 document.body 中
view.mount(document.body)
}
}
// 导出 router 实例
export default new Router()
// home下的index.js举例
// 引入 router
import router from '../../router'
// 引入 html 模板,会被作为字符串引入
import template from '../../../index.html'
// 引入 css, 会生成