Сгенерировать динамическое поле данных с использованием дочернего компонента

Я хочу создать динамическое поле данных, используя значение свойства, переданное в дочернем компоненте.

Код:

 ...

    <datafieldcheckbox :categories = "abc" @call-method = "callfilteredproducts"></datafieldcheckbox>

    new Vue({
          el: "#app",
          data: {
            abc: null, // this will generate based on a value of prop passed in child component.
            products: [
                          {
                            "id": "1",
                            "name": "Product1",
                            "abc": "EEE",
                            "skill": "Easy",
                            "color": "blue",
                            "price": 100.00
                          },
                          {
                            "id": 2,
                            "name": "Product2",
                            "abc": "EEE",
                            "skill": "Intermediate",
                            "color": "red",
                            "price": 120.00
                          },
                          {
                            "id": 3,
                            "name": "Product3",
                            "abc": "Office",
                            "skill": "Intermediate",
                            "color": "green",
                            "price": 190.00
                          }
                    ]
              ...
const dfCheckBox = Vue.component('datafieldcheckbox', {
            template: `<div id = "one">
                    <h4><strong>Categories</strong></h4>
                    <ul class = "categoriesFilter">
                        <li v-for = "category in categories"><label><input type = "checkbox" :id = "category" :value = "category" v-model = "selectedFilters.categories" @click = "filterProducts()"><span class = "categoryName">{{category}}</span></label></li>
                    </ul>   
                    </div>`,
            data() {
                return{
                    products : null,
                    selectedFilters: {
                        categories: [],
                        colors: [],
                        minPrice: null,
                        maxPrice: null
                    }
                }
        },
        props : ['categories'],
        methods: {
            filterProducts(){
                    this.$emit('call-method', this.selectedFilters);
            }
        }
        });

как в приведенном выше коде. Если я напишу abc, он сгенерирует такой код в родительском данные:

Теперь предположим, что у меня есть данные в продуктах, и я хочу найти уникальные значения ключа, который передается из дочерних свойств.

В дочернем компоненте, что вам нужно делать с abc. я не понимаю тебя

Abinesh Joyel 25.04.2018 13:52

@AbineshJoyel Обновите мой вопрос

Harsh Patel 25.04.2018 14:02

Можете ли вы обновить дочерний компонент datafieldcheckbox. есть ли у дочернего компонента текстовое поле. при вводе в текстовое поле продукт данных необходимо отфильтровать

Abinesh Joyel 25.04.2018 14:10

@AbineshJoyel Обновлено!

Harsh Patel 25.04.2018 14:12

В продукте выбранные категории должны отображаться правильно. Вы говорите abc категории

Abinesh Joyel 25.04.2018 14:19

да это правильно

Harsh Patel 25.04.2018 14:29
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
6
51
1

Ответы 1

Просто передайте массив товаров дочернему компоненту и отфильтруйте категорию по флажку. пожалуйста, попробуйте это

шаблон

<!-- child -->
<script type = "text/x-template" id = "grid-template">
<div>
  <h2>
  category list:
  </h2>
 <ul>
     <li v-for = "category in categories">
   <label>{{category.abc}}</label>
   <input type = "checkbox" :value = "category" v-model = "selectedCategory" @change = "emitback(selectedCategory)"/>
   </li>
 </ul>
 </div>
</script>

<!-- parent  -->
<div id = "demo">
  <h2>
  selected category:
  </h2>
  <ul>
    <li v-for = "category in selectedCategory">
      {{category.abc}}
    </li>
  </ul>
  <datafieldcheckbox :categories = "product" @call = "callfilteredproducts"></datafieldcheckbox>
</div>

сценарий

Vue.component('datafieldcheckbox', {
  template: '#grid-template',
  props: {
    categories: Array,
  },
  created(){
    console.info(this.categories);
  },
  data: function () {
    return {
      selectedCategory:[]
    }
  },
  methods: {
        emitback(selectedVal){
            this.$emit('call',selectedVal);
    }
  }
})

// bootstrap the demo
var demo = new Vue({
  el: '#demo',
  data: {
    selectedCategory:[],
    product:[
              {
                "id": "1",
                "name": "Product1",
                "abc": "EEE",
                "skill": "Easy",
                "color": "blue",
                "price": 100.00
              },
              {
                "id": 2,
                "name": "Product2",
                "abc": "EEE",
                "skill": "Intermediate",
                "color": "red",
                "price": 120.00
              },
              {
                "id": 3,
                "name": "Product3",
                "abc": "Office",
                "skill": "Intermediate",
                "color": "green",
                "price": 190.00
              }
         ]
  },
  methods:{
    callfilteredproducts(event){
    console.info(event);
      this.selectedCategory = event
    }
  }
})

демо Jsfiddle

Я попробую это и дам вам знать, есть ли какие-либо вопросы. Спасибо за помощь!

Harsh Patel 25.04.2018 14:58

пожалуйста, сначала попробуйте демо-скрипт. И скажите, хорошо ли это для вас

Abinesh Joyel 25.04.2018 15:07

Дело в том, что вы уже определили, что будет выбрано, но в моем случае данные о продукте динамические, я не знаю, что будет передано в дочерний компонент.

Harsh Patel 26.04.2018 06:16

извините @HarshPatel, на самом деле ссылка на скрипт js была изменена, взгляните на этот jsfiddle.net/umo8yarq

Abinesh Joyel 26.04.2018 11:13

Другие вопросы по теме