2016-03-17 13 views
6

, więc mam komponent z szablonem zawierającym formularz.komponenty angularjs otrzymujące formularz wewnątrz szablonu

mycomponent.html:

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

Jak mogę uzyskać dostęp MyForm wewnątrz kontrolera komponentu? Obecnie wstrzykiwam $ scope, aby to uzyskać. A może to jedyny sposób na uzyskanie formularza?

Edycja: Dodano jakiś kod, aby lepiej zilustrować w 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

Generalnie wiążą Cię elementy w postaci, w kątowe, zamiast do czynienia z Formularz bezpośrednio. Czy jest jakiś powód, dla którego musisz uzyskać dostęp do samego elementu formularza? – Dave

+0

Chciałem sprawdzić $ pristine, $ valid e.t.c. –

Odpowiedz

18

atrybut formularza name co kątowe zastosowania zdecydować, jakie wiążą się. Tak więc, jeśli używasz składni controllerAs, trzeba użyć, że w imię forma:

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

To pozwoli Ci odnieść się do niego w kontrolerze bez użycia $ zakres, ale dopiero wtedy, gdy regulator ma zostało pomyślnie utworzone:

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

    var vm = this; 

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

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

Tutaj działa plunk.

+1

Dzięki, działało to z niewielkimi modyfikacjami, ponieważ używam komponentów i nie mam dostępu do tego, o ile wiem, "mainctrl jak vm". Dave

+0

Tak, kątowe 1.5 i widzę. Dobrze wiedzieć na przyszłość! –

Powiązane problemy