boki
by kordarei
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.18.0/axios.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue-router/3.0.2/vue-router.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vuex/3.0.1/vuex.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pace/1.0.2/pace.min.js"></script>
<script src="https://unpkg.com/buefy/dist/buefy.min.js"></script>
<link rel="stylesheet" href="https://unpkg.com/buefy/dist/buefy.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/material-design-icons/3.0.1/iconfont/material-icons.min.css">
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div id="app">
<router-view></router-view>
</div>
</body>
<template id="userList">
<ul>
<li v-for='user in $store.state.userIndex'>
<router-link :to="'/user/'.concat(user.id)">{{user.name}}</router-link>
</li>
</ul>
</template>
<template id="userShow">
<div>
<router-link to="/">Home</router-link>
<p>name: {{$store.state.userData.name}}</p>
<p>username: {{$store.state.userData.username}}</p>
<p>email: {{$store.state.userData.email}}</p>
</div>
</template>
</html>
CSS
.pace {
-webkit-pointer-events: none;
pointer-events: none;
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
}
.pace-inactive {
display: none;
}
.pace .pace-progress {
background: #7957d5;
position: fixed;
z-index: 2000;
top: 0;
right: 100%;
width: 100%;
height: 2px;
}
.pace .pace-progress-inner {
display: block;
position: absolute;
right: 0px;
width: 100px;
height: 100%;
box-shadow: 0 0 10px #7957d5, 0 0 5px #7957d5;
opacity: 1.0;
-webkit-transform: rotate(3deg) translate(0px, -4px);
-moz-transform: rotate(3deg) translate(0px, -4px);
-ms-transform: rotate(3deg) translate(0px, -4px);
-o-transform: rotate(3deg) translate(0px, -4px);
transform: rotate(3deg) translate(0px, -4px);
}
.pace .pace-activity {
display: block;
position: fixed;
z-index: 2000;
top: 15px;
right: 15px;
width: 14px;
height: 14px;
border: solid 2px transparent;
border-top-color: #7957d5;
border-left-color: #7957d5;
border-radius: 10px;
-webkit-animation: pace-spinner 400ms linear infinite;
-moz-animation: pace-spinner 400ms linear infinite;
-ms-animation: pace-spinner 400ms linear infinite;
-o-animation: pace-spinner 400ms linear infinite;
animation: pace-spinner 400ms linear infinite;
}
@-webkit-keyframes pace-spinner {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(360deg);
transform: rotate(360deg);
}
}
@-moz-keyframes pace-spinner {
0% {
-moz-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-moz-transform: rotate(360deg);
transform: rotate(360deg);
}
}
@-o-keyframes pace-spinner {
0% {
-o-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-o-transform: rotate(360deg);
transform: rotate(360deg);
}
}
@-ms-keyframes pace-spinner {
0% {
-ms-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-ms-transform: rotate(360deg);
...
Vue
store = new Vuex.Store({
state: {
userIndex: [],
userData: {}
},
mutations: {
setIndex(state, data) {
state.userIndex = data
},
setData(state, data) {
state.userData = data
},
unsetData(state) {
state.userData = {}
},
}
});
var UserIndex = Vue.component('user-index', {
store,
template: '#userList',
mounted() {
axios.get('https://jsonplaceholder.typicode.com/users')
.then(function(response){
this.$store.commit('setIndex', response.data)
}.bind(this))
}
})
var UserShow = Vue.component('user-show', {
store,
template: '#userShow',
mounted() {
axios.get('https://jsonplaceholder.typicode.com/users/'.concat(this.$route.params.id))
.then(function(response){
this.$store.commit('setData', response.data)
}.bind(this))
},
beforeDestroy() {
this.$store.commit('unsetData')
}
})
const router = new VueRouter({
routes: [
{ path: '/', component: UserIndex },
{ path: '/user/:id', component: UserShow }
]
})
new Vue({
el:'#app',
store,
router
})