2015-12-07 5 views
2

У меня есть главный контроллер для моего приложения, который отвечает только за показ и скрытие заголовка сайта прямо сейчас. Однако он снова не отображается, когда я перехожу на домашнюю страницу (через домашнюю ссылку или кнопку возврата). Я отлаживал и проверял, что переменная области имеет значение true, но представление не отражает этого.

Вот соответствующий код:

(index.html)

... 
<body ng-app="mainApp" ng-controller="MainController"> 

<div class="container"> 
    <div class="top-header" ng-show='showHeader'> 
... 

(MainController.js)

app.controller('MainController', function($scope, $location) { 

init(); 
$scope.click = function() { 
    init(); 
} 

function init() { 
    $scope.showHeader = false; 
    if ($location.path() === "/") 
     $scope.showHeader = true; 
} 

$scope.$on('$routeChangeSuccess', function(next, current) { 
    init(); 
}); 

}); 

Я уверен, что это что-то тривиальное я пропускаю поскольку я новичок в AngularJS, но любая помощь будет высоко оценена.

+0

В чем ваша функция '$ scope.click'? Он устанавливает значение '$ scope.showHeader' в false, что может способствовать вашей проблеме. – jperezov

+0

Вы пробовали 'ng-if' вместо' ng-show'? –

+0

Правильно ли работает подпись обратного вызова '$ routeChangeSuccess'? [Здесь] (http://stackoverflow.com/questions/24939006/angularjs-routechangesuccess-callback-arguments) говорится, что сначала должен появиться аргумент 'event'. – Aldo

ответ

0

Вы говорите, что когда вы переходите к пути, скорее всего, не '/'. Я ожидаю, что после него будет указано имя.

Изменить этот код:

if ($location.path() === "/") 
     $scope.showHeader = true; 

Для этого:

if ($location.path() === "/" || $location.path() === "/<name>") 
     $scope.showHeader = true; 
+0

Это не сработало. Я проверил при отладке, что $ location.path() == "/" также. – Brian

0

Я бы рекомендовал использовать ui-router

Там вы можете определить, является ли определенное состояние является активным ($ state.include)

Но для меня код кажется действительным. отладить путь местоположения в функции init, там вы можете посмотреть, что происходит

И будьте осторожны со связующими примитивами (showHeader)! Такие директивы, как ng, при создании дополнительной области, поэтому дважды проверьте, нет ли ng-if вокруг ng-show.

+0

Я пытался избежать использования ui-router в этот момент, но, я думаю, я мог бы так же хорошо, как приложение становится более сложным. Я подтвердил, что функция init вызывается при нажатии на кнопку «домой» и с помощью кнопки «Назад» браузеров, а showHeader устанавливается в true. Изменение ng-show на ng-if исправлено. Спасибо. – Brian

+1

У Anditthas может быть точка здесь. Попробуйте изменить примитивный 'showHeader' на объект, например' showHeader = {status: true} ', и вместо этого выполните управление статусом. '$ scope.showHeader.status = false;'. – Aldo

+0

@ Aldo Я просто попытался сделать это объектом вместо этого и проверил, что свойство status задано как true во время отладки, но оно не работает с помощью ng-show. – Brian