/ / Wywołaj metodę dyrektywy z zawartej treści - javascript, angularjs

Wywołanie metody dyrektywy z zawartości zawartej w translatach - javascript, angularjs

Próbuję uzyskać dostęp do metody w dyrektywie z przetłumaczonej treści. Mój HTML wygląda tak:

<typeahead class="typeahead" model="customers" filtered-model="customersfiltered" ng-model="selectedcustomer">
<ul>
<li ng-click="select(customer)" ng-repeat="customer in customersfiltered | filter:filter | limitTo:10">
{{customer.firstname}} {{customer.lastname}}
</li>
</ul>
</typeahead>

I moja dyrektywa AngularJS:

directive("typeahead", function ($filter) {
return {
restrict: "E",
transclude: true,
replace: true,
scope: {
model: "=",
filteredModel: "="
},
template: "<div class="typeahead"><form><input type="text" autocomplete="off" class="col-lg-12" ng-model="filter"></form><div ng-transclude></div></div>", //
controller: function($scope){
$scope.filterArray = function(filterString){
$scope.filteredModel=  $filter("filter")($scope.model, filterString);
}

$scope.clear = function(){
$scope.filteredModel = [];
}

$scope.$watch("filter", function(){
if($scope.filter) {
$scope.filterArray($scope.filter);
} else {
$scope.clear();
}
});
},
link: function ($scope, $element, $attributes) {
$scope.select = function(customer){
console.log("dwadad");
}
}
}
})

Problem polega na tym, że nie mogę uzyskać dostępu do funkcji select () wewnątrz funkcji link () ze zdarzenia ng-click zawartej w treści transkludowanej (element list).

Czy ktoś ma pomysł, jak to rozwiązać?

Oto Plunker obecnego kodu: Plunker

Odpowiedzi:

0 dla odpowiedzi № 1

Myślę, że nie możesz tego zrobić Angular docs:

(...) Zaletą transkluzji jest to, że funkcja łącząca otrzymuje funkcja transkluzji, która jest wstępnie związana z właściwym zakresem. W typowa konfiguracja widget tworzy zakres izolatów, ale transkluzja nie jest dzieckiem, ale rodzeństwem zakresu izolatu. To umożliwia widgetowi posiadanie stanu prywatnego i transkluzja związana z zakresem macierzystym (przed izolacją).

Innymi słowy, zakres dołączonego DOMjest rodzeństwem, a nie dzieckiem, zakresu dyrektywy. Więc nie możesz uzyskać do niego dostępu stamtąd i myślę, że jest to poprawne.


0 dla odpowiedzi nr 2

Możesz użyć $$nextSibling:

link: function($scope) {

$scope.$$nextSibling.select = function(customer) {
alert("used isolated scope using $$nextSibling");
}

},