原文連接-https://github.com/AlloyTeam/omi/blob/master/tutorialcss
omi-router是Omi框架專屬的router插件,文件尺寸輕量,使用簡便,功能強大。用於Omi製做Web單頁應用的首選解決方案。html
單頁的好處也是很是明顯:git
好了,好處這麼多,看看怎麼安裝使用吧~~github
能夠直接經過Unpkg.com下載或引用cdn: https://unpkg.com/omi-router/dist/omi-router.jsweb
<script src="https://unpkg.com/omi/dist/omi.js"></script> <script src="https://unpkg.com/omi-router/dist/omi-router.js"></script>
npm install omi-router
import Omi from 'omi' import OmiRouter from 'omi-router'
若是使用全局的 script 標籤,則無須如此import即可使用。npm
import Omi from 'omi' import OmiRouter from 'omi-router' import Home from './home.js' import About from './about.js' import User from './user.js' import UserList from './user-list.js' class App extends Omi.Component { install() { OmiRouter.init({ routes: [ {path: '/', component: Home}, {path: '/about', component: About}, {path: '/user-list', component: UserList}, {path: '/user/:name/category/:category', component: User} ], renderTo: "#view", defaultRoute: '/' }) } render() { return ` <div> <ul> <li><a omi-router to="/" >Home</a></li> <li><a omi-router to="/about" >About</a></li> <li><a omi-router to="/user-list" >UserList</a></li> </ul> <div id="view"> </div> </div> ` } } Omi.render(new App(),"#__omi")
這裏詳細說下 OmiRouter.init
傳遞的配置參數的意義:框架
參數名 | 意義 | 是否必須 |
---|---|---|
routes | 路由配置。其中每一項中的path表明匹配規則,component表明渲染的組件 | 必須 |
renderTo | 組件渲染的容器 | 必須 |
defaultRoute | 若是第一次打開頁面沒攜帶hash,默認使用的地址 | 必須 |
再看下UserList:函數
import Omi from 'omi'; class UserList extends Omi.Component { render() { return ` <ul> <li><a omi-router to="/user/yanagao/category/js" >yanagao</a></li> <li><a omi-router to="/user/vorshen/category/html" >vorshen</a></li> <li><a omi-router to="/user/dntzhang/category/css" >dntzhang</a></li> </ul> `; } } Omi.tag('UserList',UserList) export default UserList
模式 | 匹配路徑 | $route.params |
---|---|---|
/user/:name | /user/dntzhang | { username: 'dntzhang' } |
/user/:name/category/:category | /user/dntzhang/category/js | { username: 'dntzhang', category: js } |
注意: $route 會被掛載在$store下,$store會在根組件中注入,在組件樹中的任何組件均可以經過 this.$store.$route.params
訪問hash傳遞的數據。動畫
import Omi from 'omi' class User extends Omi.Component { beforeRender(){ let params = this.$store.$route.params this.data.name = params.name this.data.category = params.category this.info = this.queryInfo(this.data.name) this.data.age = this.info.age this.data.sex = this.info.sex } queryInfo(name) { this.mockData = { 'yanagao': {age: 18, sex: 'female'}, 'vorshen': {age: 20, sex: 'male'}, 'dntzhang': {age: 22, sex: 'male'} } return this.mockData[name] } back(){ history.back() } render() { return ` <div > <button onclick="back">back</button> <ul> <li>name:{{name}}</li> <li>age:{{age}}</li> <li>sex:{{sex}}</li> <li>category:{{category}}</li> </ul> </div> ` } } Omi.tag('User',User) export default User
上面使用了beforeRender
進行store到data的轉換,beforeRender
是生命週期的一部分。且看下面這張圖:this
注意:除了在constructor中不能讀取到 this.$store
, 在聲明週期的任何其餘函數中都能讀取到 this.$store
,很是便捷。