我有代码(vuejs2) -
Vue.component('competetion-list', {
template: `<div>{{totalCompetetions}}</div>`,
props: ['values'],
data: function () {
return { totalCompetetions: this.values.length}
}
})
页面上没有打印任何内容,但是如果我将template
值更改为
template: `<div>{{this.values.length}}</div>`
打印15
。我做错了什么以及如何将props
传递给data
?
非常感谢任何帮助。
答案 0 :(得分:4)
我无法通过以下方式将道具values
分配给数据totalCompetetions
-
data: function () {
return { totalCompetetions: this.values.length}
}
<小时/> 但我可以使用
watch
,computed
和methods
属性来完成此操作。
使用watch
属性 -
watch: {
values: function(){
this.totalCompetitions = this.values;
}
}
使用computed
属性 -
computed:{
competition:{
get: function(){
return this.values.length;
}
}
使用methods
属性 -
methods:{
competitionn: function(){
return this.values.length;
}
}
<小时/> 但对于
computed
和methods
属性,我需要按以下方式设置totalCompetetions
-
适用于computed
-
template: `<div><p>{{totalCompetitions = competition}}</p></div>` //without parenthesis
适用于methods
-
template: `<div><p>{{totalCompetitions = competition()}}</p></div>` //with parenthesis
答案 1 :(得分:3)
您的代码可以正常使用。
我猜问题是你的父组件。你是否正确通过了values
?例如:
<competetion-list :values="[1, 2, 3]"></competetion-list>
此外,对于您的情况,我会说计算属性是一个更好的解决方案。
computed: {
totalCompetetions () {
return this.values.length
}
}
答案 2 :(得分:1)
从data()方法,您应该能够使用this
引用组件的属性。
请尝试以下操作:
Vue.component('competetion-list', {
template: `<div>{{totalCompetetions}}</div>`,
props: ['values'],
data: function () {
var data = { totalCompetetions: this.values.length}
return data
}
})
正如评论中有效提到的,如果values
数组稍后发生变化,您可能需要将观察者放在道具和内部观察者身上,将totalCompetetions
设置为this.values.length
。