2016-04-06 23 views
0

için aynıdır yönerge şu var:Argümanlar açısal direktifi

app.directive('filterComponent', function() { 
    return { 
    restrict: 'E', 
    templateUrl: 'filter-component.html', 
    link: function(scope, element, attrs) { 
     console.log(attrs); 
     scope.type = attrs["type"]; 
    } 
    }; 
}); 

ve benim html farklı yerlerde üç kez diyoruz:

<filter-component type="TYPE1"></filter-component> 
<filter-component type="TYPE2"></filter-component> 
<filter-component type="TYPE3"></filter-component> 

ve bu yönerge html geçerli:

<div id="{{type}}" class="filter-container"> 
    <div layout="row" class="rhs-text" ng-show="!noTargetSelectedYet"> 
     <md-input-container flex=""> 
      <label>Search</label> 
      <input style="position: relative; top: 7.8px;" ng-model="filterText"> 
     </md-input-container> 
    </div> 
</div> 

Sorun şu ki, id ({{type}}) aynıdır. (sonuncusu, TYPE3) tür için farklı değerler göndermeme rağmen (console.log(attrs) da görülür).

Bunun nesi yanlış?

cevap

2

Bunu dış kapsamını etkilemez böylece direktifi için izole kapsamını ayarlamak gerekir:

app.directive('filterComponent', function() { 
    return { 
    restrict: 'E', 
    scope: { 
     type: '=' 
    }, 
    templateUrl: 'filter-component.html', 
    link: function(scope, element, attrs) { 
     console.log(attrs); 
     scope.type = attrs["type"]; 
    } 
    }; 
}); 

En İyi Uygulama: istediğiniz bileşenleri için yaparken izolatı kapsamları oluşturma kapsam seçeneğini kullanın uygulamanız boyunca yeniden kullanın.

https://docs.angularjs.org/guide/directive

Güncelleme

da filterText kullanmak için:

app.directive('filterComponent', function() { 
    return { 
    restrict: 'E', 
    scope: { 
     type: '@', // You want this to be passed as a string 
     filterText: '=' // You want this to be passed as reference 
    }, 
    templateUrl: 'filter-component.html', 
    link: function(scope, element, attrs) { 
     console.log(attrs); 
     scope.type = attrs["type"]; 
    } 
    }; 
}); 

HTML:

<filter-component type="TYPE1" filterText="filterText"></filter-component> 

İzolatör kapsamları hakkında daha iyi bir anlayış için buna başvurabilirsiniz: http://weblogs.asp.net/dwahlin/creating-custom-angularjs-directives-part-2-isolate-scope

+0

Ancak denetleyicimdeki diğer değişkenleri kullanmak için kapsama ihtiyacım var. mümkün mü? – Asqan

+0

de, dış kapsam değişkeninin değerini değiştirmek isterseniz, sonuncuya ayarlanacaktır. ve ayrıca buna gerek yok. "scope.type = attrs [" type "];'; ve denetleyici kapsamındaki değerlere mi ihtiyacınız var, yoksa bunları değiştirmeye mi ihtiyacınız var? Değerlere ihtiyacınız varsa, bunları sadece direktiflere aktarmayın? – war1oc

+0

örneğin 'filterText' dir direktifin html'sinde kullanıyorum. Çözümü ile denedim ve 'filterText' ulaşılamadı. Nesneler dizgiden geçirilir ve orijinal kapsam değişkenine yönlendirilmez. – Asqan