2016-11-30 63 views
2

我對這個問題的提法感到不滿。感覺鼓勵建議改進。另外,請記住,由於忽視(無知導致煩惱),我可能有缺陷的診斷問題。對於那個很抱歉。這個沒有提供給模塊導出的上下文

this answer它建議使用this.$store.xxx,它在我的代碼失敗,因爲this是不確定的。我強烈懷疑代碼作者(這將是我)所做的一些愚蠢的事情,所以我將介紹我的組件佈局的原理圖。

它的目的是讓我有一個登陸頁面index.js創建兩個組件 - 一個用於應用程序的視覺效果和一個用於存儲信息。視覺App將由導航欄(以及稍後的渲染區域)組成。導航欄將向商店(以及查看區域)發送命令,以呈現不同的* .vue文件,其中顯示錶格,列表等。

那麼,我怎樣才能看到文本這是未定義的?我的結構是完全有缺陷還是缺少一個小細節?

index.js

import Vue from "vue" 
import Store from "./vuex_app/store" 
import App from "./vuex_modules/app.vue" 
new Vue({ el: "#app-base", components: { App }, store: Store }); 

store.js

import Vue from "vue"; 
import Vuex from "vuex"; 
Vue.use(Vuex); 
const state = { ... }; 
const mutations = { ... }; 
export default new Vuex.Store({ state, mutations }); 

app.vue

<template><div id="app">App component<navigation></navigation></div></template> 
<script> 
import navigation from "./navigation.vue" 
export default { components: { navigation } } 
</script> 

navigation.vue

<template><div id="nav-bar"><p v-on:click="updateData">Update</p></div></template> 
<script> 
import { updateData } from "../vuex_app/actions"; 
export default { 
    vuex: { 
    actions: { updateData }, 
    getters: { ... } 
    }, 
    methods: { 
    updateData:() => { 
     console.log("this is " + this); 
     this.$store.dispatch("updateData"); 
    } 
    } 
} 
</script> 

actions.js

export const updateData = ({dispatch}, data) => { 
    console.log("invoked updateData"); 
    dispatch("UPDATE_DATA", data); 
}; 
+0

可能'不要在實例屬性...使用箭頭充當箭頭功能被綁定到父上下文,這不會是Vue的情況下,你會期望和this.myMethod將是不確定的。 '每[鏈接](https://vuejs.org/v2/guide/instance.html)可以這樣嗎?哦,並感謝這張貼..它讓我調查vue.js ... – zipzit

+0

@zipzit很高興爲您的好奇心服務,嘿嘿。還要感謝+1。我會馬上查看這個部分,但無論如何,對我來說* this * * * undefined *似乎很奇怪。我可以看到它與預期值有什麼不同**但是沒有任何** ......? –

+0

@zipzit我欠你一個披薩。**是** this *的問題。可能還有更多 - 我還沒有測試整個流程 - 但它絕對是一個很好的選擇。現在,如果你可以對我的設置體系結構產生一些感受,那麼我就會全神貫注。或者,相反,所有的眼睛。 –

回答

2

Vue.js提供了一個相當不錯的反應型,簡約的JavaScript框架。不幸的是,根據this link,可能會有一些不尋常的使用要求。在這種情況下,

不要實例屬性或回調使用箭頭功能(例如 VM。$手錶( '一個',的newval => this.myMethod()))。由於箭頭函數 綁定到父上下文,因此this將不會是Vue實例,因爲您期望 和this.myMethod將是未定義的。

+0

我甚至在他們的網頁上發現了其他信息(我第一次遇到心理過載時一定錯過了)。據說Vue不是MVC框架,而是MVVM。我**沒有意識到這一點。謝了哥們! –