Sono abbastanza nuovo da angolare e cerco di imparare davvero come organizzare il mio codice, in modo che i futuri collaboratori possano trovarlo rapidamente.AngularJS: direttive vs controller: quale logica mettere dove?
Una regola che conosco è "Se manipola il DOM, inseriscilo in una direttiva", su cui mi attengo.
Ma ci sono ancora dei momenti in cui non sono sicuro dove mettere i miei metodi, come posso inserire nell'app controller principale, in un controller fornito come opzione "controller" all'interno della direttiva o anche all'interno della funzione che si trova la direttiva (opzione "link").
Con filtri e servizi è abbastanza chiaro per me, ma con i controller e le direttive la linea diventa piuttosto sfocata. Ho già capito che anche con una piccola app ho diffuso parte del codice qua e là ed è già confuso, anche per me stesso. Quindi mi piacerebbe avere alcuni consigli per organizzare meglio il mio codice.
Quindi immagino che la mia domanda principale sia:
1) Esiste una buona regola empirica per sapere quale codice inserire dove?
O se questo è troppo astratto ecco alcuni esempi:
2) Ho una direttiva con un modello che uso solo all'interno della mia app. Qualcosa dovrebbe accadere, quando clicco sull'elemento. So già che è preferibile utilizzare la direttiva ng-click per legare un evento click all'interno della funzione collegata.
Ma dove dovrei definire il metodo fornito in ng-clic?
- A) Il controller principale dell'app.
- B) La funzione "link" della direttiva.
- C) Aggiungere un controller alla direttiva (utilizzando l'opzione "controller") e definirlo lì.
3) La risposta al 2) sarebbe diversa se prevedo di riutilizzare la direttiva altrove?
4) Scenario diverso:
Ho un pulsante e quando si fa clic e trascinato dovrebbe spostare un elemento completamente non correlato.
Dovrei ...
- A) Creare una direttiva e modello di influenza & comportamento sulla base di un attributo passato?
- B) Creare due direttive (una per la maniglia, una per l'elemento di destinazione)
In caso affermativo, si pone nuovamente la questione di dove mettere i metodi per gestire il trascinamento?
Note:
sono a conoscenza le risposte potrebbero essere un po 'dipendente dal parere personale, ma ho un pò spero ci sono alcune "regole" o "modo giusto per farlo" a cui posso rispettare per il futuro sviluppo. Non ho incluso alcun codice per motivi di concisione. Se fosse necessario per una risposta sarei felice di fornirlo.
grazie per il vostro tempo.
Ho sempre considerato DIRETTIVE l'equivalente di plugin jQuery simili a quelli trovati in jQuery UI. Ad esempio, potresti averne uno per tipi di input speciali come data o ora. O forse ne avrai uno che crea un paese e/o un selettore di lingua. Dovrebbero essere caselle nere che accettano i parametri e quindi emettono eventi, attivano le richiamate o aggiornano i modelli. –