2014-04-08 24 views
5

Aşağıdaki senaryo vardır: İzole kapsamlı BIR transclude yönergesi içinde bağlı bir denetleyici bulunur:Erişim yönergesinin kontrolör

angular.module('app', []) 
.directive('hello', function() { 

    return { 

    controller: function($scope) { 
     $scope.hello = "Hello World"; 
    }, 

    restrict: 'E', 
    replace: true, 
    transclude: true, 
    template: '<div class="hello" ng-transclude></div>', 
    scope: {} 
    }; 

}); 

ben çapraz dahil elementlerden yönerge denetleyicisi erişmek için arıyorum Ancak, bu mümkün görünmemektedir. 'a $parent ve $$nextSibling ile erişmeyi denedim.

Bu senaryoda herhangi bir çözüm var mı? Denetleyiciyi sarmalayıcı örneğinde yönlendiriciye yerleştiremiyorum. http://codepen.io/anon/pen/yoCkp

fazla bilgi: Bir bağlama olarak merhaba direktifi içine değişken geçmek gerekiyor ve ayrıca izolatı kapsamın parçası olarak dahil http://codepen.io/jviotti/pen/ktpbE?editors=101

cevap

2

:

Ben bu davranışı göstermek için bir codepen yarattı burada: Confused about Angularjs transcluded and isolate scopes & bindings Düzenleme

: orijinal örnekte

, şablon ebeveyn kök kapsamı, met {{merhaba}} değişkeni beklenen Bu aslında merhaba direktif kapsamındadır. Aslında, direktifteki boş izolat kapsamı, ebeveyninden herhangi bir kapsam değişkenine ulaşmayacağı anlamına gelir. Yani yukarıdaki değişimin yaptığı şey, (var olmayan) merhaba değişkeni kök kapsamından yönlendiriciye yönlendirmektir ve sonra değeri ayarlar.

Bunu daha fazla açıklamak için şuna bir göz atabilirsiniz: http://codepen.io/anon/pen/pJEqjq - denetleyicinin $rootScope.hello ayarlandığını göreceksiniz ve aynı zamanda çalışır. Bu tavsiye edilmemesine rağmen farklı denetleyicilerdeki rootScope değişkenlerine güvenmek dağınık olabilir.

+0

Çalışma dışı örnekte, şablon {{hello}} değişkeninin üst kök kapsamı içinde olmasını bekler, ancak aslında hello yönerge kapsamındadır. – goldins

+0

https://www.airpair.com/angularjs/posts/transclusion-template-scope-in-angular-directives adresindeki yazı, neden bu şekilde çalıştığını anlamamı sağladı. – sven