Отображение и скрытие навигации заголовка в приложении Mean.js

Я создаю блог с помощью генератора Yeoman Mean.js. До сих пор мне очень нравилось работать с Mean.js, однако я относительно новичок в разработке Angular, поэтому некоторые вещи меня пока не устраивают.

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

Я попытался использовать ng-show="topbarActive" для элемента <header>, присутствующего в /app/views/layout.server.view.html:

<header ng-show="topbarActive" data-ng-include="'/modules/core/views/header.client.view.html'" class="navbar navbar-fixed-top navbar-default"></header>

Затем я попытался явно установить для этой переменной значение false в /public/modules/core/controllers/home.client.controller.js:

$scope.topbarActive = false;

Я установил это значение на true в /public/modules/users/controllers/authentication.client.controller.js в надежде, что смогу вручную пропинговать http://localhost:3000/#!/signup и увидите мою панель заголовка.

После этой настройки я нигде не вижу шапку. Учитывая, что я новичок в «Угловом пути», какие шаги мне не хватает, чтобы добиться того поведения, которое я ищу. Я запутался в том, как Mean.js строит свои зависимости?


person robabby    schedule 19.02.2015    source источник


Ответы (1)


Одной из ключевых концепций AngularJS является область видимости. В этом конкретном случае ваш контроллер HomeController назначается первому div под заголовка. Это делает область действия HomeController недоступной для его родителя (заголовка), у которого на самом деле вообще нет контроллера.

Чтобы ваша конфигурация работала, добавьте новый контроллер, например:

/* /public/modules/core/controllers/body.client.controller.js */
'use strict';

angular.module('core').controller('BodyController', ['$scope', 'Authentication', 'Menus',
    function($scope, Authentication, Menus) {
        $scope.topbarActive = true;
    }]);

А затем добавьте этот контроллер в тело в layout.server.view.html:

<body ng-cloak ng-controller="BodyController">

В качестве альтернативы вы можете создать контроллер только для своего тега, в зависимости от того, куда вы идете.

person MKouhosei    schedule 19.02.2015
comment
Я знал, что это будет что-то довольно простое. Большое спасибо за то, что указали мне правильное направление! - person robabby; 20.02.2015