【发布时间】:2019-10-05 14:31:33
【问题描述】:
使用 Vue TreeSelect Plugin 从 Firebase 后端加载嵌套的节点列表。它的文档页面说,
还可以延迟加载根级别选项。如果最初没有注册任何选项(选项:null),vue-treeselect 将尝试通过调用 loadOptions({ action, callback, instanceId }) 来加载根选项。
loadOptions(在我的 App.vue 中)调度 vuex action_FolderNodesList,获取(从 firebase)格式(根据 vue-treeselect 的要求),并改变状态 folder_NodesList,然后尝试更新选项 this.options = this.get_FolderNodesList但这似乎不起作用。
这是loadOptions方法(在app.vue中)
loadOptions() {
let getFolderListPromise = this.$store.dispatch("action_FolderNodesList");
getFolderListPromise.then(_ => {
this.options = this.get_FolderNodesList;
});
}
Invalid prop: type check failed for prop "options". Expected Array, got String with value "" 出现 Vue 错误
我不确定我做错了什么,为什么这不起作用。一个工作的Codesandbox demo
来源
App.vue
<template>
<div class="section">
<div class="columns">
<div class="column is-7">
<div class="field">
<Treeselect
:multiple="true"
:options="options"
:load-options="loadOptions"
:auto-load-root-options="false"
placeholder="Select your favourite(s)..."
v-model="value" />
<pre>{{ get_FolderNodesList }}</pre>
</div>
</div>
</div>
</div>
</template>
<script>
import { mapGetters } from "vuex";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
export default {
data() {
return {
value: null,
options: null,
called: false
};
},
components: {
Treeselect
},
computed: mapGetters(["get_FolderNodesList"]),
methods: {
loadOptions() {
let getFolderListPromise = this.$store.dispatch("action_FolderNodesList");
getFolderListPromise.then(_ => {
this.options = this.get_FolderNodesList;
});
}
}
};
</script>
Store.js
import Vue from "vue";
import Vuex from "vuex";
Vue.use(Vuex);
export const store = new Vuex.Store({
state: {
folder_NodesList: ""
},
getters: {
get_FolderNodesList(state) {
return state.folder_NodesList;
}
},
mutations: {
mutate_FolderNodesList(state, payload) {
state.folder_NodesList = payload;
}
},
actions: {
action_FolderNodesList({ commit }) {
fmRef.once("value", snap => {
var testObj = snap.val();
var result = Object.keys(testObj).reduce((acc, cur) => {
acc.push({
id: cur,
label: cur,
children: recurseList(testObj[cur])
});
return acc;
}, []);
commit("mutate_FolderNodesList", result);
});
}
}
});
感谢任何帮助。
谢谢
【问题讨论】:
-
这个问题你解决了吗?我一直在努力寻找使用 api 数据和树视图/选择的正确示例。
标签: vue.js asynchronous vuejs2 vuex