2013-05-03 16 views
7

Bir form nesnesini, form oluşturmaya çalıştığımda bir denetleyici kapsamından almaya çalışıyorum. İyi çalışıyor, ancak formu bir ng anahtarıyla oluşturursam, form hiçbir zaman kapsamda gösterilmez.ng anahtarlı açısal formlar

görünüm

app.controller('MainCtrl', function($scope) { 
    $scope.type = 1; 

    $scope.showScope = function(){ 
    console.log($scope); 
    }; 
}); 

Ben formu obj olarak $ kapsamından özelliği "theform" görebilirsiniz ng-anahtarı kaldırırsanız

<body ng-controller="MainCtrl"> 

    <div ng-switch on="type"> 
     <form name="theForm" ng-switch-when="1"> 
     <label>Form 1</label> 
     <input type="text"/> 
     </form> 
     <form name="theForm" ng-switch-when="2"> 
     <label>Form 2</label> 
     <input type="text"/> 
     <input type="text"/> 
     </form> 

    </div> 

    <button ng-click="showScope()">Show scope</button> 
</body> 

denetleyicisi.

Nasıl yapılacağı hakkında bir fikir. Farklı isimlere sahip iki formu ve ng-show'u kullanmak istemiyorum.

İşte ngSwitch yeni kapsamı oluşturur Bunun nedeni http://plnkr.co/edit/CnfLb6?p=preview

+0

thx. Bunun üzerine bir saat geçirdim. Aldığım semptom, $ geçerli ve $ kirli benim için kullanılamaz oldu. – ErichBSchulz

cevap

9

"-çalışmıyor" örneğidir. (console.log 'd alan kapsamın $$childHead değerine bakarsanız, bunun içinde theForm görebilirsiniz. Bu, ngSwitch kapsamıdır). formu her zaman aynı adı olacaksa

, sadece form içinde ngSwitch es koyabilirsiniz:

<form name="theForm"> 
    <div ng-switch on="type"> 
    <div ng-switch-when="1"> 
     <label>Form 1</label> 
     <input type="text"/> 
    </div> 
    <div ng-switch-when="2"> 
     <label>Form 2</label> 
     <input type="text"/> 
    </div> 
    </div> 
</form> 
+0

Teşekkürler, cevabınızdan beklediğimden çok daha fazlasını öğrendim. – blackjid

+1

'ng-switch on' özelliğini bir özellik olarak kullanmak yerine, daha okunabilir hale getirmek için ayrı bir etiket olarak kullanabiliriz. Örn: ' ...' – Abilash

+1

@Abilash Doğru, ancak IE 8 ve altını önemsiyorsanız, 'document.createElement' öğesini [Internet Explorer'a göre kullandığınızdan emin olun. Uyumluluk kılavuzu] (http://docs.angularjs.org/guide/ie) –

İlgili konular