Поскольку его нет в документации, я немного опасаюсь использовать его в своих директивах.
Однако мне нужно его использовать, так как в некоторых случаях я хотел бы иметь возможность выполнять множественное включение.
Итак, вот оно; могу ли я безопасно использовать его, не опасаясь того, что мои директивы будут нарушены в будущем?
Пожалуйста, не полагайтесь на этот API. $$
означает, что он частный, и мы можем сломать его в будущем выпуске.
Будет ли в будущем возможность разрешить множественное включение одного и того же элемента?
Я вижу много областей, где это было бы полезно - на самом деле это очень важно для некоторых из моих директив, где мне пришлось возиться с DOM и $ compile в функции компиляции (что не кажется чистым tbh)
Определенно было бы полезно иметь возможность реализовать поведение стиля ngIf в пользовательских директивах. Мы создаем такие директивы, чтобы нам не приходилось постоянно внедрять сервисы и создавать свойства контроллера исключительно для целей рендеринга элементов.
Я определенно предпочел бы не полагаться на внутреннее свойство директивы, чтобы заставить его работать так же, как ngIf.
Например:
import {SubscriptionService, ISubscription} from '../subscriptions/subscriptions.service';
interface IPBIfFeatureDirectiveScope extends ng.IScope {
isRenderElement: boolean;
}
interface IPBIfFeatureDirectiveAttributes extends ng.IAttributes {
pbIfFeature: string;
ngIf: string;
}
class IfFeatureDirective implements ng.IDirective {
public transclude: any;
public priority: number;
public terminal: boolean;
public restrict: string;
public scope = true;
public link: ng.IDirectiveLinkFn;
public $$tlb: boolean;
constructor(ngIfDirectiveArr: ng.IDirective[],
subscriptionService: SubscriptionService,
$parse: ng.IParseService) {
let ngIfDirective: any = ngIfDirectiveArr[0];
this.transclude = ngIfDirective.transclude;
this.priority = ngIfDirective.priority - 1;
this.terminal = ngIfDirective.terminal;
this.restrict = ngIfDirective.restrict;
this.$$tlb = true;
this.link = function (scope: IPBIfFeatureDirectiveScope,
element: ng.IAugmentedJQuery,
attr: IPBIfFeatureDirectiveAttributes) {
let expression: string = attr.pbIfFeature;
let argArray: IArguments = arguments;
let executeDirective = (): void => {
subscriptionService.getSubscription().$promise
.then((subscription: ISubscription) => {
scope.isRenderElement = $parse(expression)(subscription.features);
attr.ngIf = 'isRenderElement';
ngIfDirective.link.apply(null, argArray);
});
};
executeDirective();
};
}
}
export const ifFeatureDirectiveFactory = (ngIfDirective: ng.IDirective[],
subscriptionService: SubscriptionService,
$parse: ng.IParseService): ng.IDirective => new IfFeatureDirective(ngIfDirective, subscriptionService, $parse);
ifFeatureDirectiveFactory.$inject = ['ngIfDirective', 'subscriptionService', '$parse'];
Самый полезный комментарий
Будет ли в будущем возможность разрешить множественное включение одного и того же элемента?
Я вижу много областей, где это было бы полезно - на самом деле это очень важно для некоторых из моих директив, где мне пришлось возиться с DOM и $ compile в функции компиляции (что не кажется чистым tbh)