2016-03-17 14 views
6

quindi ho un componente con un modello contenente un modulo.componenti angularjs ottenere un modulo all'interno del modello

mycomponent.html:

<div> 
    <form name="myForm"> 
     <!-- more html code --> 
    </form> 
</div> 

Come posso accedere myForm all'interno del controllore componente? Attualmente sto iniettando $ scope per ottenerlo. Oppure è l'unico modo per ottenere il modulo?

Edit: aggiunto un po 'di codice per illustrare meglio in javascript

angular.module('example') 
.component('myComponent', { 

    templateUrl: 'mycomponent.html', 
    controller: function($scope) { 
     $scope.myForm // This works 
     this.myForm // undefined, can I access it through the component scope instead of $scope somehow? 
    } 
}); 
+0

Generalmente si legano gli elementi nella forma in angolare, piuttosto che fare con la forma direttamente. C'è qualche ragione per cui è necessario accedere all'elemento del modulo stesso? – Dave

+0

Volevo controllare $ pristine, $ valid e.t.c. –

risposta

18

L'attributo name di una forma è quello che usi angolari per decidere cosa si legano a. Quindi, se si sta utilizzando la sintassi controllerAs, è necessario utilizzare che in nome modulo:

<body ng-controller="MainCtrl as vm"> 
    <form name='vm.myForm'> 
    </form> 
    </body> 

questo vi permetterà di fare riferimento ad esso nel controllore senza utilizzare $ portata, ma solo dopo che il regolatore ha stato creato con successo:

app.controller('MainCtrl', function($scope, $timeout) { 

    var vm = this; 

    console.log(vm.myForm); // undefined 

    $timeout(function() { 
     console.log(vm.myForm); // FormController object 
    }, 100); 
}); 

Ecco una plunk lavoro.

+1

Grazie, ha funzionato con una leggera modifica dato che sto usando componenti e non ho accesso a quanto so "mainctrl as vm".

come nome e quindi accessibile come questo nel componente angolare. –

+1

Stai usando angolare 1.5? Aggiunge automaticamente '$ ctrl' come valore predefinito per' controllerAs', anche per i componenti. – Dave

+0

Sì, angolare 1.5 e vedo. Buono a sapersi per il futuro! –

Problemi correlati