Вы должны попытаться следовать парадигме одностороннего потока данных. В этом случае <filter-controls>
должно $emit
вызывать события при вводе или вы можете использовать v-model
в своем компоненте. Это похоже на <custom-input>
в примере в документации: Использование v-model
для компонентов .
Как только ваш родительский компонент понимает, что фильтрация должна быть скорректирована в связи с полученным событием, он может либо изменить реквизит, который передается в <data-list>
, который используется, чтобы знать, по чему фильтровать, или если вы передаете список элементов непосредственно в <data-list>
, вы можете отфильтровать в родительском элементе, и <data-list>
сделает повторный рендеринг для изменения списка.
Главное в Vue, как и в других «реактивных» библиотеках, заключается в том, что вам нужно придерживаться принципа:
данные вниз, подпорки .
Дети не должны мутировать данные своих родителей. Они должны рассказать родителям о чем-то, а родитель должен что-то с этим сделать. В противном случае может возникнуть трудность рассуждать о том, кто за какие данные несет ответственность.
Если вы чувствуете, что проходящие события становятся либо неуправляемыми, либо их слишком много сквозных компонентов, вы можете рассмотреть возможность использования шаблона, подобного магазину. Vue имеет библиотеку Vuex, чтобы помочь с этим, а также обсуждает некоторые вещи, которые следует учитывать в документации: Управление состоянием .