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.js
hanno switcherConfig
un'impostazione disponibile per scopi come nascondere / mostrare elementi e altre azioni. Il switcher
componente 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 abstract
che 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.xml
devi semplicemente aggiungere quanto segue al campo settings
che 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 switcher
componente contiene una matrice di rules
cui è 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 rule
passiamo due argomenti.
value
- Questo è il valore di field1
cui dovrebbe attivare il actions
definito 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, action
il nome di ciascuno è solo l'indice / chiave dell'array di quell'elemento.
Ora ognuno action
ha 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 hide
e show
. È qui che puoi iniziare ad espandere le funzionalità disponibili. L' catalog_rule_form.xml
esempio che ho citato in precedenza utilizza setValidation
se si desidera vedere un esempio diverso.
- Puoi anche aggiungere
<params>
quelli action
che li richiedono. Puoi vederlo anche catalog_rule_form.xml
nell'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 field2Depend1
visualizzato se scegli un'opzione con valore 2
attivo field1
, e field3Depend1
visualizzato se scegli un'opzione con valore 3
.
Ho provato questo esempio usando solo hide
e show
su un campo obbligatorio e sembra tenere conto della visibilità per la convalida. In altre parole, se field2Depend1
richiesto, 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.