Как я могу использовать ng-hide, если $location.url == базовый (корневой) URL?

Я хочу, чтобы ссылка Вернуться на главную отображалась под навигацией на каждой странице моего приложения Angular, кроме домашней страницы. Поэтому я хотел бы условно добавить ссылку и скрыть ее, используя ng-hide, если URL-адрес уже находится на домашней странице (вид) приложения.

Я безуспешно пытался использовать службу angular $location

<p ng-hide="location.hash == '#/'" class="container"><a href="#topics">&larr; 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 должно работать.

В основном я пробую третий подход, указанный здесь: route-that-i-am-currently-on">Как мне использовать angular ng-hide на основе страницы/маршрута, на котором я сейчас нахожусь? Но это не работает. Два других подхода на этой странице кажутся слишком сложными для того, чего я пытаюсь достичь.

Что мне не хватает?


person Tyler Youngblood    schedule 24.07.2014    source источник
comment
См. эту ссылку для аналогичного вопроса, который был задан ранее: stackoverflow.com/questions/24940320/   -  person Matt M    schedule 25.07.2014


Ответы (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, он не должен заботиться о #.

person Adrian Neatu    schedule 24.07.2014
comment
Ах, вот этого шага мне не хватало! Я не назначал $location.path() чему-либо в своем контроллере. Спасибо вам обоим!! - person Tyler Youngblood; 25.07.2014
comment
Здесь просто отсутствует двойная кавычка <div ng-hide="currentPath == '/'"></div> (но нельзя редактировать только один символ :() - person roxySka; 05.11.2014
comment
@roxySka Спасибо за это, я только что отредактировал ответ, а также добавил проверку на точное равенство. - person Adrian Neatu; 06.11.2014
comment
@Gino Я предполагаю, что при изменении вашего маршрута вы используете другой контроллер, убедитесь, что все контроллеры имеют местоположение в области действия, или используйте более высокую область действия, например rootScope. - person Adrian Neatu; 15.03.2017

Angular ищет переменную $scope с именем location. Если вы хотите, чтобы это работало, вам нужно будет сделать:

$scope.location = window.location

в вашем контроллере. Но тогда вам действительно следует ввести $location и установить $scope.location = $location

person dave    schedule 24.07.2014