Vuejs bootstrap b-table 数据不是 loading/updating
Vuejs bootstrap b-table data not loading/updating
我在 Vue 中有一个对象,它包含每个用户的字符串键和一个(课程)列表作为我想用来填充 b-table 的值。
我想知道是否有办法使 table 中的项目具有反应性,即 table 随着 userCourses 变量中的数据更新而更新。
代码的简化版本如下所示:
<div v-for="user in users" v-bind:key="user">
<b-table :items="userCourses[user]" :fields="courseFields"></b-table>
</div>
userCourses: {
'userOne': [...],
'userTwo': [...]
}
改进示例:
Vue.config.productionTip = false;
Vue.use(BootstrapVue);
new Vue({
data() {
return {
user: null,
users: ["userOne", "userTwo"],
userCourses: {
userOne: [{ c: "Java" }, { c: "PHP" }, { c: "C#" }],
userTwo: [{ c: "English" }, { c: "Polish" }, { c: "Spanish" }]
},
fields: [{ key: "c", label: "Course" }],
course: "example"
};
},
methods: {
addCourse() {
this.userCourses[this.selectedUser].push({ c: this.course });
}
},
computed: {
selectedUser: {
get() {
return this.user || this.users[0];
},
set(v) {
this.user = v;
}
}
}
}).$mount("#app");
<link type="text/css" rel="stylesheet" href="//unpkg.com/bootstrap/dist/css/bootstrap.min.css" />
<link type="text/css" rel="stylesheet" href="//unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.min.css" />
<script src="//polyfill.io/v3/polyfill.min.js?features=es2015%2CIntersectionObserver" crossorigin="anonymous"></script>
<script src="//unpkg.com/vue@latest/dist/vue.min.js"></script>
<script src="//unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.min.js"></script>
<div id="app">
<b-form-radio v-for="user in users" v-model="selectedUser" name="selected-user" :key="'u-'+user" :value="user">{{user}}</b-form-radio>
<b-form-input v-model="course" placeholder="Course name"></b-form-input>
<b-button @click="addCourse">Add</b-button>
<div v-for="(courses, user) in userCourses" :key="'c-'+user">
<strong>{{user}}</strong>
<b-table :items="courses" :fields="fields"></b-table>
</div>
</div>
上一个例子:
Vue.config.productionTip = false;
Vue.use(BootstrapVue);
new Vue({
data() {
return {
users: ["userOne", "userTwo"],
selectedUser: "userOne",
courseName: "example",
userCourses: {
userOne: [{c: "A"}, {c: "B"}, {c: "C"}],
userTwo: [{c: "X"}, {c: "Y"}, {c: "Z"}]
}
};
},
methods: {
addCourse() {
this.userCourses[this.selectedUser].push({
c: this.courseName
});
}
}
}).$mount("#app");
<link type="text/css" rel="stylesheet" href="//unpkg.com/bootstrap/dist/css/bootstrap.min.css" />
<link type="text/css" rel="stylesheet" href="//unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.min.css" />
<script src="//polyfill.io/v3/polyfill.min.js?features=es2015%2CIntersectionObserver" crossorigin="anonymous"></script>
<script src="//unpkg.com/vue@latest/dist/vue.min.js"></script>
<script src="//unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.min.js"></script>
<div id="app">
<b-form-radio v-for="user in users" v-model="selectedUser" name="selected-user" :value="user">{{user}}</b-form-radio>
<b-form-input v-model="courseName" placeholder="Course name"></b-form-input>
<b-button @click="addCourse">Add</b-button>
<div v-for="user in users" v-bind:key="user">
<b-table :items="userCourses[user]"></b-table>
</div>
</div>
我在 Vue 中有一个对象,它包含每个用户的字符串键和一个(课程)列表作为我想用来填充 b-table 的值。
我想知道是否有办法使 table 中的项目具有反应性,即 table 随着 userCourses 变量中的数据更新而更新。 代码的简化版本如下所示:
<div v-for="user in users" v-bind:key="user">
<b-table :items="userCourses[user]" :fields="courseFields"></b-table>
</div>
userCourses: {
'userOne': [...],
'userTwo': [...]
}
改进示例:
Vue.config.productionTip = false;
Vue.use(BootstrapVue);
new Vue({
data() {
return {
user: null,
users: ["userOne", "userTwo"],
userCourses: {
userOne: [{ c: "Java" }, { c: "PHP" }, { c: "C#" }],
userTwo: [{ c: "English" }, { c: "Polish" }, { c: "Spanish" }]
},
fields: [{ key: "c", label: "Course" }],
course: "example"
};
},
methods: {
addCourse() {
this.userCourses[this.selectedUser].push({ c: this.course });
}
},
computed: {
selectedUser: {
get() {
return this.user || this.users[0];
},
set(v) {
this.user = v;
}
}
}
}).$mount("#app");
<link type="text/css" rel="stylesheet" href="//unpkg.com/bootstrap/dist/css/bootstrap.min.css" />
<link type="text/css" rel="stylesheet" href="//unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.min.css" />
<script src="//polyfill.io/v3/polyfill.min.js?features=es2015%2CIntersectionObserver" crossorigin="anonymous"></script>
<script src="//unpkg.com/vue@latest/dist/vue.min.js"></script>
<script src="//unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.min.js"></script>
<div id="app">
<b-form-radio v-for="user in users" v-model="selectedUser" name="selected-user" :key="'u-'+user" :value="user">{{user}}</b-form-radio>
<b-form-input v-model="course" placeholder="Course name"></b-form-input>
<b-button @click="addCourse">Add</b-button>
<div v-for="(courses, user) in userCourses" :key="'c-'+user">
<strong>{{user}}</strong>
<b-table :items="courses" :fields="fields"></b-table>
</div>
</div>
上一个例子:
Vue.config.productionTip = false;
Vue.use(BootstrapVue);
new Vue({
data() {
return {
users: ["userOne", "userTwo"],
selectedUser: "userOne",
courseName: "example",
userCourses: {
userOne: [{c: "A"}, {c: "B"}, {c: "C"}],
userTwo: [{c: "X"}, {c: "Y"}, {c: "Z"}]
}
};
},
methods: {
addCourse() {
this.userCourses[this.selectedUser].push({
c: this.courseName
});
}
}
}).$mount("#app");
<link type="text/css" rel="stylesheet" href="//unpkg.com/bootstrap/dist/css/bootstrap.min.css" />
<link type="text/css" rel="stylesheet" href="//unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.min.css" />
<script src="//polyfill.io/v3/polyfill.min.js?features=es2015%2CIntersectionObserver" crossorigin="anonymous"></script>
<script src="//unpkg.com/vue@latest/dist/vue.min.js"></script>
<script src="//unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.min.js"></script>
<div id="app">
<b-form-radio v-for="user in users" v-model="selectedUser" name="selected-user" :value="user">{{user}}</b-form-radio>
<b-form-input v-model="courseName" placeholder="Course name"></b-form-input>
<b-button @click="addCourse">Add</b-button>
<div v-for="user in users" v-bind:key="user">
<b-table :items="userCourses[user]"></b-table>
</div>
</div>