Затем используйте EventEmitter для переключения. что-то вроде ниже.
appchild.component.ts
import { Component, Input, EventEmitter, Output } from '@angular/core';
@Component({
selector: 'app-child',
template: `<button class='btn btn-primary' (click)="handleclick()">Click me</button> `
})
export class AppChildComponent {
handleclick() {
// Add toggle code here or set the flag to show/hide
}
}
Это, кажется, ошибка компилятора. Я просто выполнил тот же образец в VS2008SP1 и получил ожидаемый вывод.
Для чего это стоит, GCC 3.4.6 делает ожидаемую вещь:
$ g++ main.cpp
$ a.out
C::C()
C::C()
C::~C()
C::~C()
caught exception
Если исключение будет выдано в конструкторе Object, то деструктор не будет работать.
Компилятор не имеет никакого способа знать, завершился ли конструктор достаточно, чтобы деструктор работал правильно.
См. http://www.parashift.com/c++-faq-lite/exceptions.html#faq-17.4
Править: Ответ на комментарий ниже... В этом случае наиболее вероятно, что ошибка компилятора, смешивающая ', не выполняет деструктор' правило в с неправильно не уничтожением объектов на стеке.
Возможно, поток суда не сбрасывается? Можно ли попробовать cerr вместо этого? или непосредственно помещенный точка останова в деструктор и проверку, если они поражены?
Похож на ошибку в стопке обработки исключений, раскручивают код. Попытайтесь делать простой класс E с экземпляром его в конструкторе D и посмотрите, называют ли это.
Это ошибка компилятора в C ++ Builder 2006. C ++ Builder 2009 исправляет ее; это вывод, который я получаю для BCC v6.1:
C::C() 1
C::C() 2
C::C() 3
C::~C() 3
C::~C() 2
C::~C() 1
caught exception