Причина, по которой было выбрано неправильное местоположение и почему import {Location} from "@angular/common";
помогла, заключается в том, что, не импортируя его, TypeScript фактически думает, что вы хотите использовать тип window.location
, который совершенно отличается от того, который вы ищете,
Поскольку тип является токеном для извлечения нужного экземпляра из реестра DI angular, вы ничего не получите, если используете неправильный тип.Когда вы закомментируете импорт и «щелкнете» по типу Location
в вашей IDE, вы увидите, что выбранный тип на самом деле является интерфейсом DOM, а не реализацией Angular.Этот интерфейс DOM неявно присутствует, когда в вашем tsconfig.json есть "lib": ["dom"]
.
Импорт Location
из angular явно затмевает Location
из DOM, выбирается правильный тип, и в реестре DI angular находится правильный Location
экземпляр.
На самом деле это довольно легкоошибку (я сделал это сам), потому что даже если вы забудете импортировать Location
, будет выбран DOM Location
, и вы вообще не получите никакой обратной связи в вашей IDE, и вам будет интересно, почему DI не работает.