esto es una especie de relación con ExpressionChangedAfterItHasBeenCheckedError nuevamente.
en mi situación, tengo un parámetro 'datos' que recupero de la llamada ajax. estos datos se utilizan para crear un niño a través de la directiva @input. Deseo que el enlace solo ocurra cuando se definen los datos. pero no tengo idea de cómo hacer eso con angular
export class UserComponent{ data: any constructor( private userService: UserService){ this.userService.getUser() .subscribe(result => { this.data = result; } } ); }porque la forma en que funciona, angular mostrará un ExpressionChangedAfterItHasBeenCheckedError, que entiendo por qué, pero cómo pedirle a angular que espere a que se realice la devolución de llamada y que los datos sean != de indefinidos antes de comenzar a vincular y esas cosas, el objetivo es tener algunos child inicializado con el valor real proveniente de la base de datos.
Si debo esperar al final del ciclo antes de vincular datos "reales", está bien, pero cómo hacerlo sin tener este error (¡y por favor sin usar setTimeout ya que parece un montón de basura!).
Gracias
<!--the template if it matter --><somechildtag [data]="data" ></somechildtag>Cargue su componente con ng-container .
Por ejemplo:
<div *ngIf="data?.length > 0"> <ng-container *ngComponentOutlet="myChildComponent; ngModuleFactory: childComponentsModule;"></ng-container> </div> Por lo tanto, representará a su hijo solo si su objeto data está poblado .
En su componente:
private childComponentsModule: NgModuleFactory<any>; constructor(private compiler: Compiler){ this.childComponentsModule = compiler.compileModuleSync(ChildComponentsModule); }Puede ver un ejemplo más detallado de cómo cargar dinámicamente un componente aquí:
Angular2: use Pipe para renderizar plantillas dinámicamente
Documentación de angular:
https://angular.io/docs/ts/latest/api/common/index/NgComponentOutlet-directive.html