vue获取本地时间和服务器时间(顺便复习vuex的内容)

1. vue 实时获取时间

now: new Date()
mounted() {
 setInterval(()=>{
 	this.now = new Date()
 }, 1000)
}

2. 获取服务器的时间,防止本机时间获取错误

  • 场景: 本机经常关机,时间获取不同步,但是服务器时间是同步的,需要获取服务器的时间显示
  • 解决办法:
    - 1. 在后端服务器的响应头部可以获取date,
    - 2. 使用简单状态管理store来获取本地时间与服务器的时间差
    - 3. 混入到需要使用的组件中
  • 代码
// store 
var store = {
  debug: true,
  state: {
    differTime: ''
  },
  changeTIme (newValue) {
    if (this.debug) console.log('setMessageAction triggered with', newValue)
    this.state.differTime = valueOf(new Date()) - valueOf(newValue) // 时间戳的差值
  }
}

// request.js
import store from 'store'
// 添加响应拦截器
instance.interceptors.response.use(
  function (response) {
  // 获取服务器时间
  	if(response.header.date) {
  		store.changeTime(response.header.date)
  	}
    return response
  },
  function (error) {
    // 对响应错误做点什么
    return Promise.reject(error)
  }
)

// minxin.js 使用公共状态store
import store from '../xx/store'
export default {
	data() {
		return {
			storeState: store.state // {differTime: ''}
			myState: {
				currentTime: ''
			}
		}
	},
	computed: {
		formatTime() {
			return this.$moment(this.currentTime).format('YYYY-MM-DD HH:mm:ss')
		},
		formatMonth() {
			return this.$moment(this.currentTime).format('YYYY-MM')
		},
		formatYear() {
			return this.$moment(this.currentTime).format('YYYY')
		}
	},
	mounted() {
		this.timer = setInterval(() => {
			this.currentTime = new Date( valueOf(new Date()) + this.storeState.differTime)
		},
		1000)
	}
}

// xxx.vue中使用

import myMixin from 'xxx'
export default {
	 mixins: ['myMixin'],
	 data() {return {}}
	}
	
// 则可以使用this.myState.formatTime ......

VUEX 总结

– 上面使用了简单状态管理,具体参考官网说明,只提供了全局变量,和操作变量的方法

  • 相当于使用了Vuex中的state, 和mutations功能, 没有getters, actions, modules(五大功能)

  1. 不能直接改变state里的数据。

  2. mutations:通过执行 this.$store, commit('mutation名称', payload)来触发 mutation 的调用, 间接更新 state

  3. actions 组件中: this.$store.dispatch(‘action 名称’, data1),actions中可以包含异步代码(例如:定时器, 请求后端接口), actions中调用mutations的函数,可以监听操作state的变化

  4. getters可以获取state中经过计算的属性, 类似vue中computed属性,具有缓存功能

  5. namespace 可以使用模块化

         // 分模块,不改方法名
       ...mapActions('模块名', ['actions方法名'])    ||     -------通常放在methods
       ...mapState(模块名', ['state名称'])        ---- 通常放在computed中
       ...mapGetters ('模块名', [ 'getters名称'  ])   ---- 通常放在computed中
       ...mapMutations ('模块名', [ 'mutations名称'  ])   -------通常放在methods
    
    或者使用  ...mapActions(['模块名/ 方法名'])   
    
    调用函数
    this.$store.dispatch("user/test", "value")  // 第二个参数为传参
    
import {createStore} from 'vuex'
import collapse from "./modules/collapse";
import authState from './modules/auth';
 
export default createStore({
    modules: {
        collapse,
        authState 
    },
})

//auth.js
const authState = {
    namespaced: true, // 开启命名空间
    state: {
        count: 0,
    },
    mutations: {
        setCount(state, data) {
            state.count= data
        },
    },
    actions: {},
    getters: {
        count: state => state.count,
    }
}
export default authState 

—完美!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于vue项目的本地跨域和服务器跨域,可以通过配置vue.config.js文件来实现。在vue.config.js文件中,devServer配置项用于配置项目的开发服务器。可以通过设置proxy来实现跨域请求。 在devServer的proxy配置中,可以设置一个代理名称,比如"/dev-api",当请求dev-api时,实际上是请求http://localhost:3001。 而具体的跨域地址可以在.env.development文件中进行配置。在这个文件中,可以设置VUE_APP_BASE_API和VUE_APP_SERVICE_URL。VUE_APP_BASE_API用于指定开发环境的代理名称,比如"/dev-api"。而VUE_APP_SERVICE_URL用于指定开发环境的跨域地址,比如"http://vue.mengxuegu.com/pro-api"。 另外,如果你想在本地开启一个可以跨域请求的浏览器窗口界面,可以按照以下步骤进行操作: 1. 新建一个MyChromeDevUserData文件夹。 2. 在文件夹中右键开启一个终端。 3. 在终端中输入以下命令: `open -n /Applications/Google\ Chrome.app/ --args --disable-web-security --user-data-dir=/Users/用户名称/Documents/MyChromeDevUserData` 这样就可以打开一个可以跨域请求的浏览器窗口界面了。 总结起来,通过配置vue.config.js文件和.env.development文件,可以实现vue项目的本地跨域和服务器跨域。同时,如果需要在本地开启一个可以跨域请求的浏览器窗口界面,可以按照上述步骤进行操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Vue本地跨域与线上跨域](https://blog.csdn.net/Jk200165/article/details/123921671)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [关于本地vue项目跨域的解决方案](https://blog.csdn.net/qq_31851435/article/details/126052335)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值