Za pomocą angular
, mam sytuację, w której napisałem niestandardową dyrektywę, a następnie kilka filtrów.
Przeprowadziłem wiele poszukiwań i nie byłem w stanie znaleźć jasnego sposobu na usunięcie filtrów z dyrektywy po dołączeniu. Są one dołączone w ten sposób;
<div ng-data-bind="Model.Tags | format:"json""></div>
Dyrektywa wygląda jak...
.directive("ngDataBind", ["$parse", "$filter", function($parse, $filter){
return {
restrict: "A",
scope: {
ngDataBind: "="
},
link: function(scope, element, attributes, controller) {
// I am hoping to get the value of "format" here (which is "json" in this case)
}
}
});
W tej chwili filtr to tylko ekstremalnie nagie kości. Nie dodałem jeszcze do niego żadnej prawdziwej funkcjonalności, ponieważ wiele z tego, co muszę zrobić, jest w dyrektywie.
.filter("format", function(){
return function(text, value) {
}
});
Tak więc w ngDataBind
dyrektywy, którą pisałem, chcę uzyskać format
filtr i przekazany do niego parametr.
Spojrzałem na $filter
usługa i wydaje się, że tego nie robi. Próbowałem przeanalizować to z attributes
przekazany parametr link
w sprawie dyrektywy, ale wszystko, co mi daje, to ogromny ciąg, który nie jest aż tak użyteczny.
Czy są jakieś informacje na ten temat, gdziekolwiek?
Po sprawdzeniu przez osoby z dużo większym doświadczeniem w tym zakresie niż ja, przyjmuję inne podejście, ponieważ najwyraźniej nie jest to właściwe użycie filtrów.
Metoda, którą zamierzam, polega na stworzeniu właściwości w dyrektywie, które są przypisane jak wyrażenia, na przykład...
<div c-data-bind="{ value: "Model.Tags", format: "json" }"></div>
Poszedłem z tą metodą, ponieważ istnieje pewna spójność w oczekiwanych danych wejściowych (zawsze wymaga, aby treść była zawarta w ""
zamiast niezgodności między typami cytatów) i umożliwia rozszerzenie dyrektywy bez konieczności późniejszego dodawania kolejnych dyrektyw. Nie jestem pewien, czy to dobre podejście, czy nie, ale… to wydaje się do pracy.
Odpowiedzi:
1 dla odpowiedzi № 1Twoje podejście jest nie do przyjęcia. Dyrektywa nie powinna zajmować się filtrem.
Filtr przetworzy powiązane dane zgodnie ze swoją logiką.
Dyrektywa otrzyma przefiltrowane dane i będzie na nich działać zgodnie ze swoją logiką.
Żaden z nich nie musi wiedzieć o drugim. Jeśli ich potrzebujesz, Twój projekt jest wadliwy.
Widzieć Separacje troski