Angular.js: ¿$$ tlb seguirá siendo / oficial?

Creado en 29 ene. 2014  ·  3Comentarios  ·  Fuente: angular/angular.js

Dado que no está en los documentos, soy un poco cauteloso al usarlo en mis directivas.

Sin embargo, necesito usarlo, ya que me gustaría poder hacer transclusiones múltiples en algunos casos.

Así que ahí está; ¿Puedo usarlo de manera segura sin temor a que mis directivas se rompan en el futuro?

Comentario más útil

¿Habrá algún tipo de opción para permitir la transclusión múltiple en el mismo elemento en el futuro?
Puedo ver muchas áreas en las que esto sería útil; en realidad es bastante importante para algunas de mis directivas, donde me han reducido a jugar con el DOM y $ compilar en la función de compilación (que no se siente limpio, tbh)

Todos 3 comentarios

No confíe en esta API. $$ significa que es privado y podemos romperlo en una versión futura.

¿Habrá algún tipo de opción para permitir la transclusión múltiple en el mismo elemento en el futuro?
Puedo ver muchas áreas en las que esto sería útil; en realidad es bastante importante para algunas de mis directivas, donde me han reducido a jugar con el DOM y $ compilar en la función de compilación (que no se siente limpio, tbh)

Definitivamente sería útil poder implementar el comportamiento de estilo ngIf en directivas personalizadas. Creamos tales directivas para que no tengamos que inyectar servicios constantemente y crear propiedades de controlador únicamente con el propósito de renderizar elementos.

Definitivamente preferiría no tener que depender de una propiedad de directiva interna para que funcione igual que ngIf.

Por ejemplo:

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'];
¿Fue útil esta página
0 / 5 - 0 calificaciones