我希望将数据中定义的固定目录路径与v-for
中定义的文件名连接起来。当我尝试使用计算属性时,我得到:
“TypeError:_vm.filePath不是函数”。
data: function(){
return{
imageDir: '../assets/images/tiles/'
}
},
computed:{
filePath: function(fileName){
let path = this.imageDir + fileName
return path
}
}
<image :src="filePath(tile.image)" />
当我将filePath
移动到方法时,它可以正常工作。然而,我的印象是像这样的简单变换正是计算属性的用途。
答案 0 :(得分:2)
您收到此错误是因为您将filePath
视为一项功能,但它可用作值。因此,您不能将其称为函数:
<ChildComponentName :src="filePath(tile.image)" />
如果计算出来,你可以:
<ChildComponentName :src="filePath" />.
要使其正常运行,您可以尝试像这样修改您的代码(假设您有权访问tile
,您最有可能这样做),如果您希望它保留在computed
:
computed:{
filePath(){
return this.imageDir + this.tile.image;
}
}
否则,将其移至methods
,正如菲尔在答案中提到的那样。
UPD:如果您无法访问this.tile
,则可以在ChildComponentName
内计算完整文件路径:
computed:{
filePath(){
return this.imageDir + this.src;
}
}
但在这种情况下,您必须能够访问此子组件中的imageDir
。
答案 1 :(得分:0)
您可以将computed
更改为methods
并将图片作为参数传递。
您无法将计算值作为函数调用。他们没有参数。您可以将这些视为&#34;生成&#34;变量
答案 2 :(得分:0)
计算属性用于创建属性,例如您可以在&#34;数据&#34;中创建的属性。部分。不应该用作方法。
实际上Vue.js正在使用Javascript&#34; defineProperty&#34;在对象中创建属性的方法,这就是为什么你可以像这样调用你的计算属性:vm.myProperty而不是像这个vm.myProperty()。如果我们按照您要执行的操作,您希望您的计算机为您的v-for的每个值创建一个属性。
您可以详细了解计算机的工作原理here
答案 3 :(得分:0)
如果您使用computed
,则html应该与:src="filePath"
类似,因为您在computed
中定义的功能是getter
功能。
data: function(){
return{
imageDir: '../assets/images/tiles/'
}
},
computed:{
filePath: function(){
let path = this.imageDir + this.tile.image;//or other
return path
}
}
<ChildComponentName :src="filePath" />
如果您使用methods
,则可以使用您的代码。filePath(tile.image)
表示调用filePath
函数并传递参数tile.image