Angular.js: Est-ce que $$tlb va rester/officiel ?

Créé le 29 janv. 2014  ·  3Commentaires  ·  Source: angular/angular.js

Comme il n'est pas dans la doc, je me méfie un peu de l'utiliser dans mes directives.

J'ai cependant besoin de l'utiliser, car j'aimerais pouvoir faire des transclusions multiples dans certains cas.

Tiens voilà ; puis-je l'utiliser en toute sécurité sans craindre de voir mes directives être enfreintes à l'avenir ?

Commentaire le plus utile

Y aura-t-il une sorte d'option pour permettre la transclusion multiple sur le même élément à l'avenir ?
Je peux voir de nombreux domaines où cela serait utile - c'est en fait assez important pour certaines de mes directives, où j'ai été réduit à jouer avec le DOM et $ compiler dans la fonction de compilation (qui ne semble pas propre tbh)

Tous les 3 commentaires

Veuillez ne pas vous fier à cette API. $$ signifie qu'il est privé et que nous pourrions le casser dans une future version.

Y aura-t-il une sorte d'option pour permettre la transclusion multiple sur le même élément à l'avenir ?
Je peux voir de nombreux domaines où cela serait utile - c'est en fait assez important pour certaines de mes directives, où j'ai été réduit à jouer avec le DOM et $ compiler dans la fonction de compilation (qui ne semble pas propre tbh)

Il serait certainement utile de pouvoir implémenter le comportement de style ngIf dans les directives personnalisées. Nous créons de telles directives afin de ne pas avoir constamment à injecter des services et à créer des propriétés de contrôleur uniquement à des fins de rendu d'éléments.

Je préférerais certainement ne pas avoir à compter sur une propriété de directive interne pour que cela fonctionne de la même manière que ngIf.

Par exemple:

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'];
Cette page vous a été utile?
0 / 5 - 0 notes