1.全局过滤器
(1)normalTime.js 自定义 将 时间戳 转换成 日期格式 过滤器
/**
* 将 时间戳 转换成 日期格式
*/
export const normalTime = (time) => {
if(time){
var oDate = new Date();
oDate.setTime(time);
var y = oDate.getFullYear();
var m = oDate.getMonth() + 1;
var d = oDate.getDate();
var h = oDate.getHours();
var mm = oDate.getMinutes();
var s = oDate.getSeconds();
return y + '-' + m + '-' + d + ' ' + h + ':' + mm + ':' + s;
}
}
(2)index.js 入口文件
/**
* 过滤器
* 入口文件
*/
import { normalTime } from './normalTime'
// webpack 2中不允许混用import和module.exports
// module.exports = {
// normalTime
// };
export default {
normalTime
};
2.全局引入
main.js
import Vue from 'vue'
import App from './App.vue'
// 引入 路由
import VueRouter from 'vue-router'
// 引入 路由配置文件
import routes from './router.config'
// 引入 vuex入口文件
import store from './store/index'
// 引入 axios
import axios from 'axios'
// 引入 loading 组件
import Loading from './components/loading'
// 全局引入 自定义过滤器
import filters from './filters'
// 向过滤器里添加函数
// ES6 循环遍历所有过滤器
Object.keys(filters).forEach(key => Vue.filter(key, filters[key]))
/**
* 以前
* Vue.filter(名字,函数);
* 例如:
Vue.filter('filtername',function(value,参数){
return 参数+value.split('').reverse().join('');
});
*/
/*Vue.filter('normalTime',(time) => {
if(time){
var oDate = new Date();
oDate.setTime(time);
var y = oDate.getFullYear();
var m = oDate.getMonth() + 1;
var d = oDate.getDate();
var h = oDate.getHours();
var mm = oDate.getMinutes();
var s = oDate.getSeconds();
return y + '-' + m + '-' + d + ' ' + h + ':' + mm + ':' + s;
}
});*/
Vue.use(VueRouter);
Vue.use(Loading);
// 关于axios配置
axios.interceptors.request.use(function(config){
// 发送请求
store.dispatch('showLoading');
return config;
},function(error){
return Promise.reject(error);
});
axios.interceptors.response.use(function(response){
// 请求回来
store.dispatch('hideLoading');
return response;
},function(error){
return Promise.reject(error);
});
// 配置请求的根路径
// axios.default.baseURL = 'http://localhost:8080';
// 设置默认头部信息 post
// axios.default.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
// 把axios对象挂到Vue原型上
Vue.prototype.$http = axios;
// 创建 路由
const router = new VueRouter({
mode:'history', // 删除 url 中的'#'号,切换路径模式
scrollBehavior:() => ({y:0}), // 滚动条滚动的行为,不加这个默认就会记忆原来滚动条的位置
routes // routes 等价于 routes:routes
});
require('./assets/css/base.css'); // 全局引入
new Vue({
el: '#app',
router,
store,
render: h => h(App)
})
3.在组件中使用
Article.vue
4.动画效果 (transition 实现动画效果)
App.vue
<template>
<div id="app">
<loading v-show="loading"></loading>
<NavView v-show="headerShow"></NavView>
<!-- transition 实现动画效果 -->
<transition name="slide-down">
<!-- keep-alive 如果有数据,则保持原样 -->
<!-- <keep-alive>
<router-view class="router-view"></router-view>
</keep-alive> -->
<router-view class="router-view"></router-view>
</transition>
<FooterView></FooterView>
</div>
</template>
<script>
/**
* 引入 组件
*/
// 头部导航
import NavView from './components/Nav.vue'
// 底部选项卡
import FooterView from './components/Footer.vue'
// 引入 vuex 的两个方法
import {mapGetters, mapActions} from 'vuex'
export default {
// 计算属性
computed:mapGetters([
// 从getters中获取headerShow的值
'headerShow',
'loading'
]),
watch:{ // 监听,当路由发生变化的时候执行
$route(to,from){
if(to.path == '/user-info'){
/**
* $store来自Store对象
* dispatch 向 actions 发起请求
*/
this.$store.dispatch('hideHeader');
}else{
this.$store.dispatch('showHeader');
}
}
},
components:{
NavView,
FooterView
}
}
</script>
<style lang="scss">
@import './assets/css/index.css';
.slide-down-enter-active,
.slide-down-leave-active{
transition: .4s all ease;
opacity:0.2;
transform:translate3d(0,6em,0);
}
.slide-down-enter,
.slide-down-leave{
opacity:1;
transform:translate3d(0,6em,0);
}
</style>
5.效果图