【发布时间】:2018-07-28 21:06:47
【问题描述】:
所以我的层次结构是这样设置的
根
-
应用程序
- 时间线项目
- 时间线元数据
- 时间线项目
在哪里
在 app.vue 中 在挂载时,我做了一些 http 请求,在获取和处理数据时,我填充了一个时间线变量
<template>
<div id="app">
<div class="loading" v-show="loading">Loading ...</div>
<table class="timeline">
<TimelineItem v-for="event in timeline" :key="event.id" :item="event" :players="players" :match="match"></TimelineItem>
</table>
</div>
</template>
export default class App extends Vue {
...
public timeline: any[] = [];
public mounted() {
...
if (!!this.matchId) {
this._getMatchData();
} else {
console.error('MatchId is not defined. ?matchId=....');
}
}
private _getMatchData() {
axios.get(process.env.VUE_APP_API + 'match-timeline-events?filter=' + JSON.stringify(params))
.then((response) => {
this.loading = false;
this.timeline = [];
this.timeline = response.data;
}
...
}
然后在我的 TimelineItem 我有这个:
<template>
<tr>
<td class="time">
...
<TimelineItemMetadata :item="item" :match="match"></TimelineItemMetadata>
</td>
</tr>
</template>
....
@Component({
components: {
...
},
})
export default class TimelineItem extends Vue {
@Prop() item: any;
@Prop() match: any;
@Prop() players: any;
}
</script>
然后,在我的 TimelineItemMetadata 中:
<template>
<div>
TEST1
{{item}}
</div>
</template>
<script lang="ts">
import { Component, Vue, Prop, Watch } from 'vue-property-decorator';
@Component({})
export default class TimelineItemMetadata extends Vue {
@Prop() item: any;
@Prop() match: any;
@Watch('match') onMatchChanged() {
console.log('TEST');
}
@Watch('item') onItemChanged() {
console.log('ITEM', this.item);
}
public mounted() {
console.log('timeline metadata item component loaded');
}
}
</script>
@Watch 项目和匹配项 不会 被触发,但使用 Vue-devtools 时,它说有数据......它会打印出来......所以为什么我的@Watch 没有被触发?
【问题讨论】:
-
也许只是复制/粘贴的问题,但在您的
TimelineItem中,您没有在@Component组件选项中设置TimelineItemMetada。此外,在您的TimelineItemMetadata中有一个定义onMathcChanged函数的错字(这应该与您的问题无关) -
是的,我包括了所有组件,因此 TimelineItemMetadata 正在显示和显示 {{item}} ....只是 @Watch 没有触发...感谢您的提示错别字...但是,是的,这是不相关的,没有解决问题:/已经在这个问题上几个小时了...无法解决它:'(
标签: typescript vue.js