Недавно начал изучать VueJS 2, и при создании фильтра для таксономий для wordpress темы столкнулся с такой проблемой
(Error in render:"TypeError: Cannot read property 'term_id' of undefined")
, то есть при фильтрации данных почему 'term_id' undefined.
JS файл
<pre>
Vue.component('post-list',{
template : '#post',
data () {
return {
brands: [],
types: [],
products : [],
search:'',
category: 'All',
}
},
mounted() {
axios
.get("http://newnevesteli/wp-json/wp/v2/productstax")
.then(response => (this.brands = response.data));
axios
.get("http://newnevesteli/wp-json/wp/v2/typestax?per_page=100")
.then(response => (this.types = response.data));
axios
.get("http://newnevesteli/wp-json/wp/v2/products/?per_page=40")
.then(response => (this.products = response.data));
},
computed: {
filteredPost: function () {
let self = this;
let category = self.category;
if(category == "All") {
return self.products
.filter((products) => {
return products.title.rendered.toLowerCase().match(this.search);
})
} else {
return self.products
.filter((products) => {
return products.title.rendered.toLowerCase().match(this.search);
})
.filter((products) => {
return products.tax_prod[0].term_id == this.category;
})
.filter((products) => {
return products.tax_type[0].term_id == this.category;
})
}
}
}
});
new Vue({
el: '#app',
component: 'post-list'
});
</pre>
** PHP шаблон **
<pre>
<section class="pt30">
<div class="container">
<div id="app">
<post-list></post-list>
</div>
<template id="post">
<div>
<div class="row">
<div class="col-sm-12">
<input type="text" v-model="search" placeholder="Search">
</div>
<div class="col-sm-3">
<div>
<input type="radio" value="All" id="All" v-model="category" checked name="taxonomy">
<label for="All">All</label>
</div>
</div>
<div class="col-sm-3">
<div v-for="brand in brands">
<input type="radio" :value="brand.id" :id="brand.name" v-model="category" name="taxonomy">
<label :for="brand.name">{{brand.name}}</label>
</div>
</div>
<div class="col-sm-3">
<div v-for="type in types">
<input type="radio" :value="type.id" :id="type.name" v-model="category" name="taxonomy">
<label :for="type.name">{{type.name}}</label>
</div>
</div>
</div>
<div>
<div v-for="post in filteredPost">
<div class="col-sm-3">
<a :href="post.link">{{post.title.rendered}}</a>
</div>
</div>
</div>
</div>
</template>
</div>
</section>
</pre>
** function.php ** Функция которая добавляет нужные поля в WP REST API
<pre>
function prepare_rest($data, $post, $request) {
$_data = $data->data;
$tax_prod = wp_get_post_terms( $post->ID, 'productstax', array("fields" => "all") );
$tax_type = wp_get_post_terms( $post->ID, 'typestax', array("fields" => "all") );
$_data['tax_prod'] = $tax_prod;
$_data['tax_type'] = $tax_type;
$data->data = $_data;
return $data;
}
add_filter('rest_prepare_products', 'prepare_rest', 10, 3);
?>
</pre>
JSON
Пример элемента которые приходят через REST API
<pre>
[
{
"id": 5669,
"date": "2017-09-15T16:18:29",
"date_gmt": "2017-09-15T13:18:29",
"guid": {
"rendered": "http://newnevesteli/?post_type=products&p=5669"
},
"modified": "2017-11-23T23:54:40",
"modified_gmt": "2017-11-23T20:54:40",
"slug": "nelda-2",
"status": "publish",
"type": "products",
"link": "http://newnevesteli/products/nelda-2/",
"title": {
"rendered": "NELDA"
},
"content": {
"rendered": "",
"protected": false
},
"featured_media": 0,
"template": "",
"tags": [],
"productstax": [
87
],
"typestax": [
47
],
"productcattax": [
112
],
"collectionstax": [
86
],
"tax_prod": [
{
"term_id": 87,
"name": "Vestelli",
"slug": "vestelli-2",
"term_group": 0,
"term_taxonomy_id": 87,
"taxonomy": "productstax",
"description": "",
"parent": 0,
"count": 66,
"filter": "raw",
"term_order": "5"
}
],
"tax_type": [
{
"term_id": 47,
"name": "Пышные и А-Силует",
"slug": "pishnie-i-a-siluet",
"term_group": 0,
"term_taxonomy_id": 47,
"taxonomy": "typestax",
"description": "",
"parent": 0,
"count": 65,
"filter": "raw",
"term_order": "0"
}
],
"_links": {
"self": [
{
"href": "http://newnevesteli/wp-json/wp/v2/products/5669"
}
],
"collection": [
{
"href": "http://newnevesteli/wp-json/wp/v2/products"
}
],
"about": [
{
"href": "http://newnevesteli/wp-json/wp/v2/types/products"
}
],
"version-history": [
{
"href": "http://newnevesteli/wp-json/wp/v2/products/5669/revisions"
}
],
"wp:attachment": [
{
"href": "http://newnevesteli/wp-json/wp/v2/media?parent=5669"
}
],
"wp:term": [
{
"taxonomy": "post_tag",
"embeddable": true,
"href": "http://newnevesteli/wp-json/wp/v2/tags?post=5669"
},
{
"taxonomy": "productstax",
"embeddable": true,
"href": "http://newnevesteli/wp-json/wp/v2/productstax?post=5669"
},
{
"taxonomy": "typestax",
"embeddable": true,
"href": "http://newnevesteli/wp-json/wp/v2/typestax?post=5669"
},
{
"taxonomy": "productcattax",
"embeddable": true,
"href": "http://newnevesteli/wp-json/wp/v2/productcattax?post=5669"
},
{
"taxonomy": "collectionstax",
"embeddable": true,
"href": "http://newnevesteli/wp-json/wp/v2/collectionstax?post=5669"
}
],
"curies": [
{
"name": "wp",
"href": "https://api.w.org/{rel}",
"templated": true
}
]
}
},
]
</pre>
На одном поле прицеплен autocomplete и inputmask
Прохожу курс по js и после него начну изучать nodejs, но уже сейчас хотелось бы понимать, какую лучше всего использовать БД! В интернете пишут,...
У меня есть 10 элементов, которые я вывожу с помощью ng-repeatПод каждым есть кнопка редактирования
Вопрос, собственно, заключается в названии: как вернуть String из getComputedStyle?