Установите значение для тега <li> и обновите реквизит: нажмите $event vue.js

Я пытаюсь обновить дочерние реквизиты до родительских с помощью on:click $event.

Я передал данные и $event от родителя к дочернему, как показано ниже. в родительском;

<v-filter
    :sortTypePrice = "sortTypePrice"
    :sortTypeNewest = "sortTypeNewest"
    v-on:updatePrice = "sortTypePrice = $event"
    v-on:updateDate = "sortTypeNewest = $event"
/>


data(){
    return {
        sortTypePrice: "",
        sortTypeNewest: "",
    }
 }

computed: {
  filterArticles(){

      let filteredStates = this.api.filter((article) => {
          return (this.keyword.length === 0 || article.address.includes(this.keyword)) 
      });

      if (this.sortTypePrice == "price") {
          filteredStates = filteredStates.sort((prev, curr) => prev.price1 - curr.price1);
      }
      if (this.sortTypeNewest == 'created_at') {
          filteredStates = filteredStates.sort((prev, curr) => Date.parse(curr.created_at) - Date.parse(prev.created_at));
      }

      return filteredStates;
  },
}

Я получил реквизит и установил обновление $event. Но мой @click не работает.

у ребенка

<ul>
  <li v-model = "sortPrice" @click = "updatePrice" :value = "price">lowest</li>
  <li v-model = "sortDate" @click = "updateDate" :value = "created_at">newest</li>
</ul>


props:["sortTypePrice", "sortTypeNewest"],
name: "controller",
data(){
    return {
        price: "price",
        created_at: "created_at",
        sortPrice:this.sortTypePrice,
        sortDate:this.sortTypeNewest,
    };
},
methods: {
    updatePrice(e){
        this.$emit("updatePrice", e.target.value)
    },
    updateDate(e){
        this.$emit("updateDate", e.target.value)
    }
}

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

Поведение ключевого слова "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
0
1 088
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я считаю, что лучший способ синхронизации реквизита между родительским и дочерним компонентами — это:

в родительском:

<!-- notice `sync` modifier -->
<child :foo.sync = "val" />

у ребенка:

<input v-model = "foo_" />

props: ['foo'],
computed: {

    // create a local proxy for the `foo` prop
    foo_{
        // its value should be the value of the prop
        get(){
            return this.foo
        },

        // when we try to change it we should update the prop instead
        set(val){
            this.$emit('update:foo', val)
        }
    }
}

Теперь в дочернем компоненте вы можете работать с реквизитом foo_ так же, как и с реквизитом foo. Всякий раз, когда вы пытаетесь изменить его, он обновляет реквизит foo в родительском элементе, а затем синхронизируется, чтобы foo_ оставался равным foo. Например, this.foo_ = 1 будет foo == 1.

Это тот же шаблон, который применяется с директивой v-model. Проверьте .sync Модификатор для лучшего понимания.

спасибо за совет, я попробую это позже.

user10753862 29.05.2019 11:10
Ответ принят как подходящий

Не следует устанавливать одновременно :value и v-model. Можешь попробовать

<ul>
  <li @click = "$emit('updatePrice', 'price')" :value = "price">lowest</li>
  <li @click = "$emit('updateDate', 'created_at')" :value = "created_at">newest</li>
</ul>

хорошо, получилось. Спасибо!! а также не нужно использовать :value = "", потому что он уже установлен внутри $emit. Часть, которую я не понимаю. Я использовал это так: <li @click = "updatePrice" :value = "price">安い順</li> но не получилось... какая разница? почему $emit не может обновляться через methods:{}?

user10753862 29.05.2019 11:09

Потому что HTML-тег <li> не имеет атрибута value.

Emīls Gulbis 29.05.2019 12:00

Спасибо за ответ! но должен быть способ установить значение атрибута в HTML-тег <li>, как я спрашивал в теме... @EmīlsGulbis

user10753862 29.05.2019 12:15

Если вы хотите установить значение для такого элемента, вам следует создать собственный компонент со свойством значения.

Emīls Gulbis 29.05.2019 12:20

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

Похожие вопросы

Дерево D3.js - проверить и установить белый узел круга заливки, если нет детей?
ПОЖАЛУЙСТА, ПОМОГИТЕ ОШИБКА Ошибка: не пойман (в обещании): ошибка: не может сопоставить ни одного маршрута. Сегмент URL: 'r2' Ошибка: не удается сопоставить ни одного маршрута. Сегмент URL: 'r2'
Проверка JOI не возвращает все ошибки, несмотря на установку преждевременного прерывания false
Мой контроллер возвращает ModelAndView, но не загружает jsp
Как сделать так, чтобы поле выбора материала Vue отображало параметр, когда значение по умолчанию пусто?
Удаление элемента из потока документов
Получить результат элементов массива, которые не соответствуют одному массиву
Как импортировать или использовать функции, определенные в стороннем пространстве имен в javascript?
Сообщения об ошибках машинописного текста для файла javascript
Вы можете найти все города, используя выражение - arrayName["cityName"], так как это объект