我现在在一个表单中有三个步骤,我想按顺序显示,所以我创建了三个组件--每个步骤一个。
我的app.js文件:
import LocationList from './components/LocationList.vue';
import ChooseTime from './components/ChooseTime.vue';
import ChooseMethod from './components/ChooseMethod.vue';
Vue.component('location-list', LocationList);
Vue.component('choose-time', ChooseTime);
Vue.component('choose-method', ChooseMethod);
let store = {
isVisible: {
steps: {
one: true,
two: false,
three: false,
}
}
};
new Vue({
el: '#app-order',
data: store,
router
});现在,当我唯一的路线被调用时,
从‘vue-路由器’导入VueRouter;
let routes = [
{
path: '/order',
component: require('./views/Order.vue')
}
];
export default new VueRouter({
routes
});所有这些组件都被正确加载。问题是,当我尝试一次只做一个v-show时:
Order.vue:
<template>
// ...
<location-list v-show="isVisible.steps.one"></location-list>
<choose-time v-show="isVisible.steps.two"></choose-time>
<choose-method v-show="isVisible.steps.three"></choose-method>
// ...
</template>
<script>
</script>
<style>
</style>我收到的错误消息是:
[Vue warn]: Property or method "isVisible" is not defined on the instance but referenced during render. Make sure to declare reactive data properties in the data option.但是当我在Vue的浏览器扩展中检查时,isVisible是在根元素中定义的吗?

正如您所看到的,它位于根元素中,而不是在Order视图中。
谢谢你的帮助!
发布于 2017-07-25 00:41:54
在Vue中,子组件不能直接访问在父组件中定义的数据。你得把数据传下来。
我认为,如果您在isVisible中定义了Order.vue,您可能会为自己省去一点麻烦。但是,如果您想将它留在原处,则需要将它传递到组件中。
一个简单的方法是将isVisble定义为Order.vue的一个属性,然后通过您的router-view传递它。
<router-view :is-visible="isVisible"></router-view>还有其他将道具传递到在路由器文档中定义路由的方法。
我说您将为在isVisible中定义Order.vue省去一些麻烦,因为每当您想要更改您的步骤的值时,就需要在根上执行它,因为您现在已经定义了它。
https://stackoverflow.com/questions/45291773
复制相似问题