Как я могу использовать ng-hide, если $location.url == base (root) url?
Мне бы хотелось, чтобы ссылка " Назад на дом" появлялась под наивацией на каждой странице моего приложения Angular, кроме главной страницы. Поэтому я хотел бы условно добавить ссылку и скрыть ее, используя ng-hide
если URL-адрес уже находится на домашней странице (вид) приложения.
Я пытался использовать Angular's $location
обслуживание без успеха
<p ng-hide="location.hash == '#/'" class="container"><a href="#topics">← Back to Home</a></p>
Я пробовал следующие варианты:
ng-hide="location.hash == '#/' " //console.log shows true
ng-hide="location.hash === '#/' " //console.log shows true
ng-hide="location.hash == '' " //console.log shows false
Я озадачен, потому что, если я регистрирую значение location.hash == '#/'
когда на главной странице я получаю true
, так ng-hide
должно сработать.
В основном я пробую третий подход, перечисленный здесь: Как использовать угловое ng-hide на основе страницы / маршрута, на котором я сейчас нахожусь? Но это не работает. Два других подхода на этой странице кажутся слишком сложными для того, чего я пытаюсь достичь.
Что мне не хватает?
2 ответа
Перво-наперво, когда вы используете location.hash или location.url, вы на самом деле используете объект javascript window.location, вы должны использовать сервис $ location, предоставляемый angular. Итак, в вашем контроллере я бы создал:
$scope.currentPath = $location.path();
И в вашем html:
<div ng-hide="currentPath === '/'"></div>
То есть я буду осторожен с "#/" и "/", я использую только режим html5, поэтому я не уверен, что вернет $location.path, но вы можете легко проверить это с console.log($location.path()) хотя я думаю, что он вернет только "/", потому что это путь для angular, его не должно волновать #.
Angular ищет $scope
переменная называется location
, Если вы хотите, чтобы это работало, вы должны сделать:
$scope.location = window.location
в вашем контроллере. Но тогда вы должны действительно ввести $location
и установить $scope.location = $location