Вы на правильном пути. Однако, когда вы скопировали код в службу, вы пропустили несколько важных шагов:
- Импортируйте все, что вам нужно в службе, и используйте конструктор, как вы были в компоненте
- Установить создать службу в качестве поставщика в
app.module
1 Импортируйте все, что вам нужно в службе, и используйте конструктор, как в компоненте
В службе вы только иметь @HostListener
без надлежащего импорта. Вверху файла service.ts я добавил следующее:
import { Router } from "@angular/router";
import { HostListener, Injectable} from "@angular/core";
@Injectable({
providedIn: 'root',
})
Смотрите, я также добавил @Injectable({})
. Вы можете узнать больше об этом здесь , здесь или здесь . @Injectable () является важным ингредиентом в каждом определении службы Angular.
Теперь внутри класса вам нужно добавить конструктор, поскольку вы планируете использовать маршрутизатор:
constructor(private router: Router) { }
в качестве примечания, вам может потребоваться изменить место, на которое указывает router.navigate
, поскольку вы находитесь в другом файле, поэтому обязательно проверьте это.
2 Настройте службу в качестве поставщика в app.module
Каждый раз, когда вы используете службу в приложении, вам необходимо настроить ее в качестве поставщика в app.module
(или какой бы модуль вы ни использовали для приложения). Это быстрое решение. В вашем файле app.module.ts
вверху вместе с другими импортируемыми файлами добавьте следующее:
import { TimeoutService } from './timeout.service';
затем в @NgModule({...})
добавьте массив providers: []
для хранения все ваши службы.
@NgModule({
imports: ...
...
providers: [TimeoutService]
})
Теперь это должно быть настроено так же, как и раньше, в компоненте. Пожалуйста, дай мне знать, если возникнут какие-либо вопросы. Вот обновленный StackBlitz