Saltar al contenido

Angular: ¿es posible agregar atributos dinámicamente al hacer clic en el botón?

Solución:

Angular simplemente ignorará la adición de marcado específico de Angular agregado dinámicamente en tiempo de ejecución. Fijaciones como [phantomOp]="myItems" [myOper]="oper" son procesados ​​por Angular solo cuando se compila un componente. Normalmente (con AoT) esto es antes de implementar su aplicación.

¿Cómo puedo usar / crear una plantilla dinámica para compilar un componente dinámico con Angular 2.0? explica cómo compilar un componente en tiempo de ejecución.

Puede simplemente introducir un campo en su componente

isClicked:boolean = false;

agregue esto a su elemento estáticamente

[phantomOp]="isClicked ? myItems : null" [myOper]="isClicked ? oper : null"

y en el controlador de clic

(click)="isClicked=true"

Recientemente me encontré con una situación similar. Quería agregar y eliminar dinámicamente el capture atributo en un FileInput. Ahora solo la presencia del capture atributo y la entrada de archivo caerá al modo de captura, por lo que tener el valor como nulo o ” no funcionó para mí.

Así es como finalmente lo hice funcionar. solía @ViewChild y ElementRef. En tu caso sería algo como:

<div #yourContainer class="container">
  <ul>
    <li> Albums </li>
    <li> Dates </li>
    </ul>
</div>

<button (click)="addContainerAttributes"> Add Container Attributes </button>

Entonces en el TS

import { Component, ElementRef } from '@angular/core';

@Component({
  selector: 'app-your-component',
  templateUrl: './your-component.component.html',
  styleUrls: ['./your-component.component.css']
})
export class YourComponent {
@ViewChild('yourContainer', {static:true}) yourContainer: ElementRef;

....

  addContainerAttributes(){
    // Not entirely sure what to put here
    this.yourContainer.nativeElement.setAttribute('phantomOp', myItems);
    this.yourContainer.nativeElement.setAttribute('myOper', oper);
  }

  // if you wish to completely remove the attribute dynamically
  removeContainerAttributes(){
    this.yourContainer.nativeElement.removeAttribute('phantomOp');
    this.yourContainer.nativeElement.removeAttribute('myOper');
  }
}

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *