Questa è una vecchia domanda con risposte multiple che funzionano, tuttavia ho scoperto una soluzione usando ciò che Magento fornisce (a partire dalla 2.1.0) senza la necessità di estendere i componenti. Poiché più domande sono state contrassegnate come duplicate e dirette qui, ho pensato che sarebbe stato utile fornire alcune informazioni su questa opzione.
Tutti i componenti dell'interfaccia utente del modulo che si estendono Magento_Ui/js/form/element/abstract.jshanno switcherConfigun'impostazione disponibile per scopi come nascondere / mostrare elementi e altre azioni. Il switchercomponente può essere trovato su Magento_Ui / js / form / switcher per i curiosi. Puoi trovarne degli esempi usati in sales_rule_form.xml e catalog_rule_form.xml . Naturalmente, se stai già utilizzando il tuo componente personalizzato, puoi comunque utilizzarlo fino a quando il componente alla fine si estende, il abstractche sembra essere il caso in base al codice di esempio fornito nella domanda.
Ora per un esempio più specifico di rispondere alla domanda originale.
In Namespace/ModuleName/view/adminhtml/ui_component/your_entity_form.xmldevi semplicemente aggiungere quanto segue al campo settingsche fa il controllo (cioè il campo che determina quali campi sono nascosti / visibili). Nel tuo esempio questo sarebbe 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>
Analizziamolo un po '. Il switchercomponente contiene una matrice di rulescui è ciò che stiamo costruendo qui. Ognuno <rule>ha un nome che è un numero in questo esempio. Questo nome è la chiave / indice dell'array per questo elemento. Stiamo usando i numeri come indici di array. Anche le stringhe dovrebbero funzionare ma non ho testato questa teoria .
AGGIORNAMENTO - Come menzionato da @ChristopheFerreboeuf nei commenti, le stringhe non funzionano qui. Questi sono array e dovrebbero iniziare con 0, non stringhe o 1.
All'interno di ciascuno rulepassiamo due argomenti.
value- Questo è il valore di field1cui dovrebbe attivare il actionsdefinito di seguito.
actions- Qui abbiamo un altro array. Queste sono le azioni da attivare quando vengono soddisfatte le condizioni di questa regola. Ancora una volta, actionil nome di ciascuno è solo l'indice / chiave dell'array di quell'elemento.
Ora ognuno actionha anche due argomenti (con un terzo opzionale).
target- Questo è l'elemento che desideri manipolare nell'ambito di questa azione. Se non hai familiarità con il modo in cui i nomi degli elementi ui_component sono composti in Magento puoi consultare l'articolo di Alan Storm . È praticamente qualcosa di simile {component_name}.{component_name}.{fieldset_name}.{field_name}a questo esempio.
callback- Ecco le azioni da intraprendere su quanto sopra target. Questo callback dovrebbe essere una funzione disponibile sull'elemento target. Il nostro esempio usa hidee show. È qui che puoi iniziare ad espandere le funzionalità disponibili. L' catalog_rule_form.xmlesempio che ho citato in precedenza utilizza setValidationse si desidera vedere un esempio diverso.
- Puoi anche aggiungere
<params>quelli actionche li richiedono. Puoi vederlo anche catalog_rule_form.xmlnell'esempio.
Finalmente l'ultimo oggetto switcherConfigè <enabled>true</enabled>. Questo dovrebbe essere piuttosto semplice, è un booleano abilitare / disabilitare la funzionalità switcher che abbiamo appena implementato.
E abbiamo finito. Quindi usando l'esempio sopra quello che dovresti vedere è il campo field2Depend1visualizzato se scegli un'opzione con valore 2attivo field1, e field3Depend1visualizzato se scegli un'opzione con valore 3.
Ho provato questo esempio usando solo hidee showsu un campo obbligatorio e sembra tenere conto della visibilità per la convalida. In altre parole, se field2Depend1richiesto, sarà richiesto solo quando visibile. Non è necessaria un'ulteriore configurazione affinché funzioni.
Spero che questo offra un po 'di aiuto a chiunque cerchi una soluzione pronta all'uso.