Este producto no es compatible con el sitio Datadog seleccionado. ().
Descripción general
Esta página describe cómo instrumentar su aplicación Angular con el Datadog Feature Flags SDK. Las Feature Flags de Datadog proporcionan una forma unificada de controlar de forma remota la disponibilidad de funciones en su aplicación, experimentar de forma segura y ofrecer nuevas experiencias con confianza.
El Datadog Feature Flags SDK para Angular está construido sobre OpenFeature, un estándar abierto para la gestión de Feature Flags. Esta guía explica cómo instalar el SDK, configurar el proveedor de Datadog y evaluar Feature Flags en sus componentes Angular utilizando directivas estructurales o el FeatureFlagService.
Requisitos
Angular versión 16 o posterior
Navegador web compatible con ECMAScript 2015 como Chrome, Edge o Firefox
Instalación
Instale el proveedor de OpenFeature de Datadog y el SDK de OpenFeature para Angular utilizando su gestor de paquetes preferido:
Cree una instancia de DatadogProvider con sus credenciales de Datadog. Para la configuración en vivo de los Browser Feature Flags, se requieren applicationId, clientToken, site y env. Para crear un token de cliente, consulte Client tokens.
Los Browser Feature Flags no son compatibles con el Datadog site seleccionado ().
import{DatadogProvider}from'@datadog/openfeature-browser';constprovider=newDatadogProvider({// Required
// applicationId is a unique identifier to distinguish multiple frontend applications.
// This should match the app ID you provide to your RUM SDK.
applicationId:'<APPLICATION_ID>',// Required
clientToken:'<CLIENT_TOKEN>',site:'',env:'<ENV_NAME>',});
Configure el módulo
Importe el OpenFeatureModule en su módulo Angular y configúrelo utilizando el método forRoot. Esto hace que las Feature Flags estén disponibles en toda su aplicación.
Establezca el contexto de evaluación
Defina a quién o a qué se aplica la evaluación de las Feature Flags mediante un contexto de evaluación. El contexto de evaluación incluye información del usuario o de la sesión utilizada para determinar qué variaciones de las Feature Flags deben devolverse. Haga referencia a estos atributos en sus reglas de segmentación para controlar quién ve cada variante.
Datadog Feature Flags requiere que los atributos del contexto de evaluación sean valores primitivos planos: cadenas, números y booleanos. No pase objetos o arreglos anidados; no son compatibles y pueden provocar que se pierdan los datos de exposición.
El targetingKey se utiliza como sujeto de aleatorización para la segmentación basada en porcentajes. Cuando un Flag segmenta un porcentaje de sujetos (por ejemplo, 50%), el targetingKey determina en qué bucket cae un usuario. Los usuarios con el mismo targetingKey siempre reciben la misma variante para un Flag determinado.
import{NgModule}from'@angular/core';import{CommonModule}from'@angular/common';import{OpenFeatureModule,EvaluationContext}from'@openfeature/angular-sdk';import{DatadogProvider}from'@datadog/openfeature-browser';constprovider=newDatadogProvider({applicationId:'<APPLICATION_ID>',clientToken:'<CLIENT_TOKEN>',site:'',env:'<ENV_NAME>',});@NgModule({imports:[CommonModule,OpenFeatureModule.forRoot({provider: provider,context:():EvaluationContext=>{// Load context from your service, localStorage, or other source
// This is a placeholder - implement based on your application's needs
returnloadContextFromLocalStorage();},}),],});exportclassAppModule{}
Actualizar el contexto de evaluación
Para actualizar el contexto de evaluación después de la inicialización (por ejemplo, cuando un usuario inicia sesión), use OpenFeature.setContext():
El OpenFeature Angular SDK proporciona dos formas principales de trabajar con Feature Flags:
Directivas estructurales: para renderizado condicional basado en plantillas
FeatureFlagService: para acceso programático con Observables o Signals
Marcadores booleanos
Utilice Feature Flags booleanas para condiciones de encendido/apagado o verdadero/falso.
<div*booleanFeatureFlag="'isFeatureEnabled'; default: true; domain: 'userDomain'; else: booleanFeatureElse; initializing: booleanFeatureInitializing; reconciling: booleanFeatureReconciling"> This is shown when the feature flag is enabled.
</div><ng-template#booleanFeatureElse> This is shown when the feature flag is disabled. </ng-template><ng-template#booleanFeatureInitializing> This is shown when the feature flag is initializing. </ng-template><ng-template#booleanFeatureReconciling> This is shown when the feature flag is reconciling. </ng-template>
Utilice Feature Flags de cadena para seleccionar entre múltiples variantes o cadenas de configuración.
<div*stringFeatureFlag="'themeColor'; value: 'dark'; default: 'light'; domain: 'userDomain'; else: stringFeatureElse; initializing: stringFeatureInitializing; reconciling: stringFeatureReconciling"> This is shown when the feature flag matches the specified theme color.
</div><ng-template#stringFeatureElse> This is shown when the feature flag does not match the specified theme color. </ng-template><ng-template#stringFeatureInitializing> This is shown when the feature flag is initializing. </ng-template><ng-template#stringFeatureReconciling> This is shown when the feature flag is reconciling. </ng-template>
Utilice Feature Flags numéricas para valores numéricos como límites, porcentajes o multiplicadores.
<div*numberFeatureFlag="'discountRate'; value: 10; default: 5; domain: 'userDomain'; else: numberFeatureElse; initializing: numberFeatureInitializing; reconciling: numberFeatureReconciling"> This is shown when the feature flag matches the specified discount rate.
</div><ng-template#numberFeatureElse> This is shown when the feature flag does not match the specified discount rate. </ng-template><ng-template#numberFeatureInitializing> This is shown when the feature flag is initializing. </ng-template><ng-template#numberFeatureReconciling> This is shown when the feature flag is reconciling. </ng-template>
Utilice Feature Flags de objeto para datos de configuración estructurados.
<div*objectFeatureFlag="'userConfig'; value: { theme: 'dark' }; default: { theme: 'light' }; domain: 'userDomain'; else: objectFeatureElse; initializing: objectFeatureInitializing; reconciling: objectFeatureReconciling"> This is shown when the feature flag matches the specified user configuration.
</div><ng-template#objectFeatureElse> This is shown when the feature flag does not match the specified user configuration.
</ng-template><ng-template#objectFeatureInitializing> This is shown when the feature flag is initializing. </ng-template><ng-template#objectFeatureReconciling> This is shown when the feature flag is reconciling. </ng-template>
De forma predeterminada, las directivas se vuelven a renderizar cuando el valor de la Feature Flag cambia o cuando cambia el contexto. Puede deshabilitar este comportamiento:
<div*booleanFeatureFlag="'isFeatureEnabled'; default: true; updateOnContextChanged: false; updateOnConfigurationChanged: false;"> This is shown when the feature flag is enabled.
</div>
Los métodos del servicio también aceptan opciones para controlar las actualizaciones automáticas:
Puede acceder a los detalles de evaluación en sus plantillas:
<div*stringFeatureFlag="'themeColor'; value: 'dark'; default: 'light'; else: stringFeatureElse; let value; let details = evaluationDetails"> It was a match! The theme color is {{ value }} because of {{ details.reason }}
</div><ng-template#stringFeatureElselet-valuelet-details="evaluationDetails"> It was no match! The theme color is {{ value }} because of {{ details.reason }}
</ng-template>
Cuando se omite el valor esperado de la Feature Flag, la plantilla siempre se renderiza. Esto se puede utilizar para renderizar solo el valor de la Feature Flag o los detalles sin renderizado condicional.
<div*stringFeatureFlag="'themeColor'; default: 'light'; let value;"> The theme color is {{ value }}.
</div>
Al utilizar el servicio, los métodos de detalle devuelven tanto el valor evaluado como los metadatos que explican la evaluación:
import{Component,inject}from'@angular/core';import{toSignal}from'@angular/core/rxjs-interop';import{FeatureFlagService}from'@openfeature/angular-sdk';@Component({selector:'my-component',standalone: true,template:`
<div *ngIf="details()?.value">
Feature is enabled! Variant: {{ details()?.variant }}, Reason: {{ details()?.reason }}
</div>
`,})exportclassMyComponent{privateflagService=inject(FeatureFlagService);details=toSignal(this.flagService.getBooleanDetails('my-feature',false));// Access the details
// details().value // Evaluated value (true or false)
// details().variant // Variant name, if applicable
// details().reason // Why this value was chosen
// details().errorCode // Error code, if evaluation failed
}
Configurar las opciones del proveedor del navegador
El proveedor de Angular utiliza el proveedor de navegador de Datadog, que también admite estos ajustes opcionales:
Opción
Predeterminado
Uso
enableExposureLogging
true
Enviar eventos de exposición a la ingesta de exposiciones.
enableFlagEvaluationTracking
true
Enviar telemetría de evaluación agregada.
enableRumFeatureFlagTracking
true
Agregar evaluaciones de Feature Flags a los eventos de RUM cuando Browser RUM esté disponible. Habilitar esta opción puede aumentar el conteo de eventos facturados de RUM.
flagEvaluationTrackingInterval
10000 ms
Intervalo de vaciado para la telemetría de evaluación.
initialFlagsConfiguration
unset
Proporcione datos precalculados que coincidan con el contexto como respaldo si la obtención falla. Consulte Initial precomputed fallback data.
flaggingProxy
unset
Obtener Feature Flags a través de un proxy en lugar de site.
customHeaders
unset
Agregar encabezados a las solicitudes de obtención de Feature Flags.
overwriteRequestHeaders
false
Reemplazar los encabezados de solicitud predeterminados con customHeaders.
DatadogProvider sigue siendo el proveedor de navegador recomendado para aplicaciones Angular. Para la entrega de configuración propiedad de la aplicación o la evaluación de reglas locales a través de cambios de contexto, consulte Evaluación basada en reglas del navegador. Esta configuración avanzada requiere una actualización de configuración explícita y la gestión del ciclo de vida del seguimiento.
Pruebas
Puede realizar pruebas en un entorno de prueba de Datadog dedicado con el DatadogProvider real, o cambiarlo por el TypedInMemoryProvider de OpenFeature para controlar los valores de las Feature Flags directamente en el código de prueba. Esta sección muestra el enfoque en memoria, que mantiene las pruebas herméticas y sin conexión. TypedInMemoryProvider se exporta desde @openfeature/web-sdk, que ya está instalado para las Feature Flags de Angular.
import{TestBed}from'@angular/core/testing';import{firstValueFrom}from'rxjs';import{FeatureFlagService,OpenFeatureModule}from'@openfeature/angular-sdk';import{TypedInMemoryProvider}from'@openfeature/web-sdk';constflags={new_checkout_button:{variants:{on: true,off: false},defaultVariant:'on',disabled: false,},};beforeEach(async()=>{awaitTestBed.configureTestingModule({imports:[OpenFeatureModule.forRoot({provider: newTypedInMemoryProvider(flags),context:{targetingKey:'test-user'},}),],}).compileComponents();});afterEach(()=>{TestBed.resetTestingModule();});it('uses in-memory flag values',async()=>{constflagService=TestBed.inject(FeatureFlagService);constdetails=awaitfirstValueFrom(flagService.getBooleanDetails('new_checkout_button',false));expect(details.value).toBe(true);});
La estructura de Feature Flags del Web SDK requiere variants, defaultVariant y disabled. Registre el proveedor en memoria antes de inyectar servicios o renderizar componentes que lean Feature Flags.
Lecturas adicionales
Documentación, enlaces y artículos útiles adicionales: