我是Vue的新手并设法让我的第一个应用程序出现一些故障,但到目前为止我真的非常喜欢它。我使用了一个视频教程,该教程从vue-cli项目创建开始,由于webpack的原因,它们是不同的。
我已经创建了该项目,该项目主要完成了它现在应该做的事情我正在尝试进行一些重构,其中包括干掉代码。
在每个页面上,我想访问存储在cookie文件中的变量,我在脚本部分的HomeComponent上完成了保存和读取,并按照承诺工作。
<script>
import MenuComponent from '@/components/MenuComponent.vue'
import Typewriter from '@/components/vue-type-writer.vue'
export default {
name: 'HomeComponent',
components: {
MenuComponent,
Typewriter
},
prop:{
isPlaying: Boolean,
username: String,
currentSound: Object
},
data() {
return{
currentSound: null,
isPlaying: false,
username: ''
}
},
methods:{
clickButton() {
this.msg= 'test 2'
},
toggleSound(){
var a = this.currentSound;
if (a.paused) {
a.play();
this.isPlaying = true;
} else {
a.pause();
this.isPlaying = false;
}
},
getCookieInfo(){
var value = "; " + document.cookie;
var parts = value.split("; weegreename=");
if (parts.length == 2)
this.username = parts.pop().split(";").shift();
else this.username = '';
},
seveFormValues (submitEvent) {
this.username = submitEvent.target.elements.name.value;
this.$refs.audio1.pause();
this.$refs.audio2.play();
var expires = "";
var days = 31;
if (days) {
var date = new Date();
date.setTime(date.getTime() + (days*24*60*60*1000));
expires = "; expires=" + date.toUTCString();
}
document.cookie = "weegreename=" + (this.username || "") + expires + "; path=/";
}
},
mounted(){
this.isPlaying = true;
this.getCookieInfo();
if (this.username) this.currentSound = this.$refs.audio2;
else this.currentSound = this.$refs.audio1;
this.currentSound.play();
}
}
</script>
现在在每个子页面上,我想访问getCookieInfo()
方法来检查用户名设置的ID。
我试过在main.js的主App.vue脚本部分添加它
new Vue({
router,
render: h => h(App),
methods: {
//here the getCookieInfo code from above
}
}).$mount('#app')
在方法中创建了一个新组件,然后尝试通过componentname.method在主应用中访问它们,如下所示。
import CookieComponent from '@/components/CookieComponent.vue'
export default {
// prop:{
// isToggled: Boolean
// },
components: {
MenuComponent,
CookieComponent
},
data() {
return{
isToggled: false
}
},
methods:{
clickToggle() {
this.isToggled = !this.isToggled;
},
},
mounted(){
CookieComponent.getCookieInfo();
}
}
我现在不知道最好的方法,我将来会学到更多,但这个项目是时间敏感的 - 我决定通过为我的客户制作一个简单的网站来学习vue:)
答案 0 :(得分:1)
如果您在每个页面上都需要它,可以将其放入App.vue。从那里你有三个选择:
如果您真的想将Cookie数据保留在组件中,则需要将组件链放在组件链中。
https://vuejs.org/v2/guide/components.html#Emitting-a-Value-With-an-Event
根据您的链条的深度以及您拥有多少兄弟组件,这可能会变得非常混乱,在这种情况下,Vuex或事件总线可能是一个更好的主意。
不要尝试做以下事情:
CookieComponent.getCookieInfo();
请查看文档以查看有关如何进行组件通信的良好示例。
答案 1 :(得分:1)
对于那种东西,最佳做法是使用状态。它将保存您的应用程序的数据,并允许您跨所有组件/页面访问它们。
您可以看到simple state management in the Vue doc,或直接使用VueX,即Vue的官方状态管理库。
总结一下它的工作原理(使用VueX):
// Where data will be saved const state = { cookie: {} } // Getters allow you to access data const getters = { cookie: state => state.cookie } // Mutations allow you to modify the state const mutations = { // Set cookie data saveCookie (state, cookieData) { state.cookie = cookieData } }
this.$store.commit('saveCookie', cookieData)
this.$store.getters.cookie