Last updated
Last updated
Обработка крайних случаев
Подобно $root
, свойство $parent
можно использовать для доступа к родительскому экземпляру из дочернего. Это может быть заманчивым для использования в качестве ленивой альтернативы передачи данных с помощью входных параметров.
В большинстве случаев обращение к родительскому компоненту делает ваше приложение более проблематичным в отладке и поддержке, особенно если вы изменяете данные в родителе. Когда вы вернётесь к этому компоненту позднее, будет очень сложно выяснить, откуда происходит изменение данных.
Однако есть случаи, в частности библиотек общих компонентов, когда это может быть подходящим. Например, в абстрактных компонентах, которые взаимодействуют через JavaScript с API вместо отрисовки HTML, как например эти гипотетические компоненты Google Maps:
Компонент <google-map>
может определять свойство map
, к которому должны иметь доступ все подкомпоненты. В этом случае <google-map-markers>
может получить доступ к карте с помощью this.$parent.getMap
, чтобы добавить на карту набор маркеров. Вы можете увидеть этот шаблон .
Однако помните, что компоненты, построенные с использованием этого шаблона являются хрупкими. Например, представьте, что мы добавляем новый компонент <google-map-region>
и когда в нём появляется <google-map-markers>
, то он должен отображать только маркеры, попадающие в регион:
Затем внутри <google-map-markers>
вы можете застать себя за созданием хаков наподобие такого:
Это может быстро выйти из-под контроля. Поэтому, чтобы предоставлять контекстную информацию для компонентов-потомков на любую глубину вложенности, мы вместо этого рекомендуем инъекцию зависимостей.