Esta é uma pergunta antiga com várias respostas que funcionam, no entanto, descobri uma solução usando o que o Magento fornece (a partir do 2.1.0) sem a necessidade de estender os componentes. Como várias perguntas foram marcadas como duplicadas e direcionadas aqui, pensei que seria benéfico fornecer algumas informações sobre essa opção.
Todos os componentes da interface do usuário do elemento de formulário que se estendem Magento_Ui/js/form/element/abstract.jstêm uma switcherConfigconfiguração disponível para fins como ocultar / mostrar elementos, além de outras ações. O switchercomponente pode ser encontrado em Magento_Ui / js / form / switcher para os curiosos. Você pode encontrar exemplos de ele ser usado em sales_rule_form.xml e catalog_rule_form.xml . Obviamente, se você já estiver usando seu próprio componente personalizado, ainda poderá usá-lo, desde que o componente se estenda, o abstractque parece ser o caso, com base no código de exemplo fornecido na pergunta.
Agora, veja um exemplo mais específico para responder à pergunta original.
Em Namespace/ModuleName/view/adminhtml/ui_component/your_entity_form.xmlvocê simplesmente precisa adicionar o seguinte ao do campo settingsque faz o controle (ou seja, o campo que determina os campos estão escondidas / visível). No seu exemplo, isso seria field1.
<field name="field1">
<argument name="data" xsi:type="array">
...
</argument>
<settings>
<switcherConfig>
<rules>
<rule name="0">
<value>2</value>
<actions>
<action name="0">
<target>your_entity_form.your_entity_form.entity_information.field2Depend1</target>
<callback>show</callback>
</action>
<action name="1">
<target>your_entity_form.your_entity_form.entity_information.field3Depend1</target>
<callback>hide</callback>
</action>
</actions>
</rule>
<rule name="1">
<value>3</value>
<actions>
<action name="0">
<target>your_entity_form.your_entity_form.entity_information.field2Depend1</target>
<callback>hide</callback>
</action>
<action name="1">
<target>your_entity_form.your_entity_form.entity_information.field3Depend1</target>
<callback>show</callback>
</action>
</actions>
</rule>
</rules>
<enabled>true</enabled>
</switcherConfig>
</settings>
</field>
Vamos dividir um pouco. O switchercomponente contém uma matriz do rulesque estamos construindo aqui. Cada <rule>um tem um nome que é um número neste exemplo. Este nome é a chave / índice da matriz para este item. Estamos usando números como índices de matriz. Strings devem funcionar também, mas eu não testei essa teoria .
ATUALIZAÇÃO - Conforme mencionado por @ChristopheFerreboeuf nos comentários, as strings não funcionam aqui. Essas são matrizes e devem começar com 0, não cadeias ou 1.
Dentro de cada um rule, passamos dois argumentos.
value- Este é o valor do field1qual deve disparar o actionsdefinido abaixo.
actions- Aqui temos outra matriz. Estas são as ações a serem acionadas quando as condições desta regra forem atendidas. Novamente, actiono nome de cada um é apenas o índice / chave da matriz desse item.
Agora, cada um actiontem dois argumentos também (com um terceiro opcional).
target- Este é o elemento que você deseja manipular sob esta ação. Se você não está familiarizado com a forma como os nomes dos elementos ui_component são compostos no Magento, consulte o artigo de Alan Storm . É basicamente algo como {component_name}.{component_name}.{fieldset_name}.{field_name}neste exemplo.
callback- Aqui está a ação a ser tomada sobre o mencionado acima target. Esse retorno de chamada deve ser uma função disponível no elemento de destino. Nosso exemplo usa hidee show. É aqui que você pode começar a expandir a funcionalidade disponível. O catalog_rule_form.xmlexemplo que mencionei anteriormente usa setValidationse você deseja ver um exemplo diferente.
- Você também pode adicionar
<params>a qualquer um actionque pedir por eles. Você pode ver isso no catalog_rule_form.xmlexemplo também.
Finalmente, o último item dentro switcherConfigé <enabled>true</enabled>. Isso deve ser bem simples: é um booleano ativar / desativar a funcionalidade do comutador que acabamos de implementar.
E nós terminamos. Então, usando o exemplo acima que você deve ver é o campo field2Depend1exibido se você escolher uma opção com valor 2em field1e field3Depend1exibida se você escolher uma opção com valor 3.
Testei este exemplo usando apenas hidee showem um campo obrigatório e parece levar em consideração a visibilidade para validação. Em outras palavras, se field2Depend1for necessário, será necessário apenas quando visível. Não há necessidade de configuração adicional para que isso funcione.
Espero que isso ofereça alguma ajuda para quem procura uma solução mais pronta para uso.