[routerLink]
- вход, обратите внимание на []
. Таким образом, Angular решит это немедленно и каждый цикл обнаружения изменений, чтобы удовлетворить шаблон. Вы хотите использовать (click)
, который является выводом, обратите внимание на ()
и будет вызываться только при нажатии кнопки. Затем вместо того, чтобы возвращать URL-адрес функции submitSurvey()
, вызовите router.navigate () (сначала введите маршрутизатор.)
html
<button class="btn btn-primary" (click)="submitSurvey()" routerLinkActive="active">Finish</button>
ts
constructor(private router: Router) { }
public submitSurvey(): void {
// Make sure everything is answered
const allOKClientSide: boolean = this.surveyService.checkEntireForm(this.thisSurvey);
if (allOKClientSide) {
if (this.surveyService.checkFormOnline(this.thisSurvey).subscribe()) {
this.router.navigateByUrl('/placeOne');
return;
}
}
this.router.navigateByUrl('/placeTwo');
}
Чтобы реализовать внешний интерфейс в объекте ATL, нужно
BEGIN_COM_MAP
. Это даст команду ATL, лежащему в основе реализации QueryInterface
, ответить положительно на запросы для этого идентификатора интерфейса (вы это сделали). IUnknown
здесь не нужно. Так что в вашем случае это будет для файла .h:
class ATL_NO_VTABLE CExternalConTest :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CExternalConTest, &CLSID_ExternalConTest>,
public IExternalCon // change the class layout
{
public:
...
BEGIN_COM_MAP(CExternalConTest)
COM_INTERFACE_ENTRY(IExternalCon) // answer to QueryInterface calls
END_COM_MAP()
...
public:
// IExternalCon
HRESULT GetName(ULONG *interface);
...
// IWhatever
HRESULT Blabla( ... );
HRESULT Blabla2( ... );
...
и для файла .cpp:
// CExternalConTest
...
// IExternalCon
HRESULT CExternalConTest::GetName(ULONG *interface)
{
// TODO : implement this
return S_OK;
}
...
// IWhatever
HRESULT CExternalConTest::Blabla(...)
{
// TODO : implement this
return S_OK;
}
HRESULT CExternalConTest::Blabla2(...)
{
// TODO : implement this
return S_OK;
}
Относительно .idl вам не нужно ничего делать, потому что Visual Studio использует его в качестве основы для генерации кода. Обычно при использовании Visual Studio вы сначала изменяете .idl (используя мастера или нет), а затем заполняете пробелы.