I’m currently working with Vue, I have a method that is suppose to return a string which is displayed in a <span>
. When I console.log the value I’m able to get the correct value however is not being passed into the span
tag.
window.onload = function () {
var app2 = new Vue({
delimiters: ['${', '}'],
el: '#app2',
data: {
jobs: jobsData,
sectionTitles: [
"Administration, Finance, Stategy and Operations",
"Data",
"Poverty Research Unit",
"Product",
"Programs and Evaluation",
"Technology",
"The Service Design Studio"
]
},
methods: {
testOne: function(job, taxanomy, mainTag) {
try {
job.tags.forEach(tag => {
if(tag != taxanomy && tag != mainTag)
{
console.log(tag)
return tag;
}
})
} catch(err) {
console.log(`${err} for ${taxanomy} - ${mainTag}`);
}
}
}
});
}
From the above code snippet you can see that I am returning a value tag. return tag
is suppose to return a string which I then pass into the following script tag.
<a :href="`${job.url}`">
${job.title}
</a>
<span class="text-right">
${ testOne(job, job.taxanomy, job.mainTag) }
</span>
The following line is not displaying anything ${ testOne(job, job.taxanomy, job.mainTag) }
although I’m able to see the return string on the console.log. I’m using ${ }
because I changed the delimeters from {{ }}
to ${ }
.
Advertisement
Answer
You are not returning a value from testOne
. You are returning a value from the callback passed to forEach
, which is not the same thing.
You can use filter to filter jobs
according to your condition and then return a value from the array.
testOne: function(job, taxanomy, mainTag) {
try {
const filtered = job.tags.filter(tag => tag != taxanomy && tag != mainTag )
return filtered[0]
} catch(err) {
console.log(`${err} for ${taxanomy} - ${mainTag}`);
}
}
I’m assuming that there is at least one result, which may not be the case.
Also your condition may yield more than one result, you should have a way of dealing with this case also.