Angular.js: Bleibt $$tlb/offiziell?

Erstellt am 29. Jan. 2014  ·  3Kommentare  ·  Quelle: angular/angular.js

Da es nicht in den Dokumenten steht, bin ich etwas vorsichtig, es in meinen Anweisungen zu verwenden.

Ich bin jedoch in der Notwendigkeit, es zu verwenden, da ich in einigen Fällen in der Lage sein möchte, mehrere Transklusionen durchzuführen.

Da ist es also; Kann ich es sicher verwenden, ohne befürchten zu müssen, dass meine Anweisungen in Zukunft gebrochen werden?

Hilfreichster Kommentar

Wird es in Zukunft eine Möglichkeit geben, mehrere Transklusionen für dasselbe Element zuzulassen?
Ich sehe viele Bereiche, in denen dies nützlich wäre - es ist tatsächlich ziemlich wichtig für einige meiner Direktiven, in denen ich darauf reduziert wurde, mit dem DOM und $compile in der Kompilierungsfunktion herumzufummeln (was sich nicht sauber anfühlt)

Alle 3 Kommentare

Bitte verlassen Sie sich nicht auf diese API. $$ bedeutet, dass es privat ist und wir es in einer zukünftigen Version möglicherweise aufheben.

Wird es in Zukunft eine Möglichkeit geben, mehrere Transklusionen für dasselbe Element zuzulassen?
Ich sehe viele Bereiche, in denen dies nützlich wäre - es ist tatsächlich ziemlich wichtig für einige meiner Direktiven, in denen ich darauf reduziert wurde, mit dem DOM und $compile in der Kompilierungsfunktion herumzufummeln (was sich nicht sauber anfühlt)

Es wäre definitiv hilfreich, das Verhalten im ngIf-Stil in benutzerdefinierten Direktiven implementieren zu können. Wir erstellen solche Direktiven, damit wir nicht ständig Dienste einschleusen und Controller-Eigenschaften nur zum Zweck des Element-Rendering erstellen müssen.

Ich würde es definitiv vorziehen, nicht auf eine interne Direktiveigenschaft angewiesen zu sein, damit es genauso funktioniert wie ngIf.

Zum Beispiel:

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'];
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen