Angular.js: Будет ли $$ tlb оставаться официальным?

Созданный на 29 янв. 2014  ·  3Комментарии  ·  Источник: angular/angular.js

Поскольку его нет в документации, я немного опасаюсь использовать его в своих директивах.

Однако мне нужно его использовать, так как в некоторых случаях я хотел бы иметь возможность выполнять множественное включение.

Итак, вот оно; могу ли я безопасно использовать его, не опасаясь того, что мои директивы будут нарушены в будущем?

Самый полезный комментарий

Будет ли в будущем возможность разрешить множественное включение одного и того же элемента?
Я вижу много областей, где это было бы полезно - на самом деле это очень важно для некоторых из моих директив, где мне пришлось возиться с DOM и $ compile в функции компиляции (что не кажется чистым tbh)

Все 3 Комментарий

Пожалуйста, не полагайтесь на этот 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'];
Была ли эта страница полезной?
0 / 5 - 0 рейтинги