Posso accedere a un modulo nel controller?

Attualmente sto usando il seguente.

$scope.$$childHead.customerForm[firstName] , in modo che:

 

Ma funziona solo su Chrome. Ora ho provato il seguente:

$scope.editCustomerForm[firstName] , in modo che:

 

Che non funziona Nota il mio modulo si trova all’interno di una scheda Foundation. Come posso accedere a firstName ?

EDIT : sembra che il form non venga aggiunto scope quando si trova all’interno di una scheda Foundation.

Qualcuno ha una soluzione per questo?

Anche se ho accennato ad altri commenti, ho pensato di spiegarlo un po ‘per quelli che usano la syntax “Controller As”:

 
...inputs Dirty? {{ctrl.myForm.$dirty}}

Quindi puoi accedere a FormController nel tuo codice come:

 function MyController () { var vm = this; vm.saveChanges = saveChanges; function saveChanges() { if(vm.myForm.$valid) { // Save to db or whatever. vm.myForm.$setPristine(); } } 

È ansible albind il modulo a un object definito in un controller principale. Quindi puoi raggiungere il tuo modulo anche da un ambito figlio.

Controllore genitore

 $scope.forms = {}; 

Alcuni modelli in ambito figlio

 

Il problema è che il modulo non deve essere definito nel momento in cui viene eseguito il codice nel controller. Quindi devi fare qualcosa di simile

 $scope.$watch('forms.form1', function(form) { if(form) { // your code... } }); 

Se si desidera passare il modulo al controller per scopi di convalida, è sufficiente passarlo come argomento al metodo che gestisce l’invio. Usa il nome del modulo, quindi per la domanda originale sarebbe qualcosa di simile:

  

Un po ‘in ritardo per una risposta, ma è venuto con l’opzione seguente. Funziona per me, ma non sono sicuro se sia il modo corretto o meno.

Dal mio punto di vista sto facendo questo:

 

E nel controller:

 $scope.setForm = function (form) { $scope.myForm = form; } 

Ora dopo aver fatto questo ho ottenuto il mio modulo nella mia variabile controller che è $scope.myForm

Per poter accedere al modulo nel controller, è necessario aggiungerlo a un object scope fittizio.

Qualcosa come $scope.dummy = {}

Per la tua situazione ciò significherebbe qualcosa come:

 

Nel tuo controller sarai in grado di accedere al modulo tramite:

 $scope.dummy.customerForm 

e sarai in grado di fare cose del genere

 $scope.dummy.customerForm.$setPristine() 

WIKI LINK

Avere un ‘.’ nei tuoi modelli assicurerà che l’eredità prototipale sia in gioco. Quindi, usa piuttosto che

Se vuoi veramente / aver bisogno di usare una primitiva, ci sono due soluzioni alternative:

1. Utilizzare $ parent.parentScopeProperty nell’object secondario. Ciò impedirà all’ambito secondario di creare la propria proprietà. 2. Definire una funzione nell’ambito genitore e chiamarla dal bambino, passando il valore primitivo fino al genitore (non sempre ansible)

Questa risposta è un po ‘in ritardo, ma mi sono imbattuto in una soluzione che rende tutto molto più semplice.

È ansible assegnare il nome del modulo direttamente al controller se si utilizza la syntax del controllerAs e quindi si fa riferimento alla variabile “this”. Ecco come l’ho fatto nel mio codice:

Ho configurato il controller tramite ui-router (ma puoi farlo come vuoi, anche nell’HTML direttamente con qualcosa come

) Ecco come potrebbe apparire in un configurazione del router:

 views: { "": { templateUrl: "someTemplate.html", controller: "someController", controllerAs: "myCtrl" } } 

e poi nel codice HTML, basta impostare il nome del modulo come “controllerAs”. “nome” in questo modo:

     

ora all’interno del tuo controller puoi semplicemente farlo:

 angular .module("something") .controller("someController", [ "$scope", function ($scope) { var vm = this; if(vm.someForm.$valid){ // do something } }]); 

Sì, puoi accedere a un modulo nel controller (come indicato nei documenti ).

Tranne quando il modulo non è definito nell’ambito del controllore e viene invece definito in un ambito figlio.

Fondamentalmente, alcune direttive angolari, come ng-if , ng-repeat o ng-include , creeranno un ambito figlio isolato. Così saranno le eventuali direttive personalizzate con un scope: {} proprietà definite. Probabilmente anche i componenti della tua fondazione sono sulla tua strada.

Ho avuto lo stesso problema quando ho introdotto un semplice ng-if attorno al tag

.

Vedi questi per maggiori informazioni:

Nota: ti suggerisco di riscrivere la tua domanda. La risposta alla tua domanda è ma il tuo problema è leggermente diverso:

Posso accedere a un modulo in un ambito figlio dal controller?

A cui la risposta sarebbe semplicemente: no .

aggiungi l’attributo ng-model="$ctrl.formName" al tuo modulo, quindi nel controller puoi accedere al modulo come object all’interno del tuo controller da this.formName

Sicuramente non puoi accedere alla form in scope bec. non è stato creato Il DOM dal template html viene caricato un po ‘lentamente come il costruttore del controller. la soluzione è di guardare fino a quando il DOM è stato caricato e tutti i limiti definiti!

nel controller:

 $timeout(function(){ console.log('customerForm:', $scope.customerForm); // everything else what you need }); 

Sì, puoi accedere a dal tuo controller tramite this.formname.