#javascript #angularjs
#javascript #angularjs
Вопрос:
У меня есть такой шаблон:
<!doctype html>
<html class="no-js">
<head>
<meta charset="utf-8">
<title>
</title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width">
<!-- Place favicon.ico and apple-touch-icon.png in the root directory -->
<!-- build:css styles/vendor.css -->
<!-- bower:css -->
<!-- endbower -->
<!-- endbuild -->
<!-- build:css(.tmp) styles/main.css -->
<link rel="stylesheet" href="styles/main.css">
<!-- endbuild -->
</head>
<body ng-app="opencubesDashboardApp">
<div class="ui inverted fixed transparent main menu" >
MENU
</div>
<ng-view>
</ng-view>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="//cdn.jsdelivr.net/semantic-ui/0.18.0/javascript/semantic.min.js"></script>
<link rel="stylesheet" href="//cdn.jsdelivr.net/semantic-ui/0.18.0/css/semantic.min.css">
<!-- build:js scripts/vendor.js -->
<!-- bower:js -->
<script src="bower_components/angular/angular.js"></script>
...
<!-- endbower -->
<!-- endbuild -->
<!-- build:js({.tmp,app}) scripts/scripts.js -->
<script src="scripts/app.js"></script>
...
<script src="scripts/controllers/mod.js"></script>
<!-- endbuild -->
</body>
</html>
Проблема в том, что главное меню может меняться или нет в зависимости от представления. Пример:
/mod/:slug
маршрут содержит вкладки Overview(выбранные), Stats, Edit general, Edit bodyи Actions/mod/:slug/stats
маршрут содержит вкладки Overview, Stats(выбранные), Edit general, Edit bodyи Actions/mod/:slug/edit/general
маршрут содержит вкладки Overview, Stats, Edit general(выбранные) Edit body и Actions- …
/user
маршрут содержит вкладки Overview(выбранные), Stats, Edit profileи Actions- …
Есть ли простой способ легко управлять этим?
Ответ №1:
Вы можете создать функцию в корневой области (или близко к корню), которая получает массив, представляющий пункты меню [{title: «, href: «}], и выполнить ее из контроллеров каждого маршрута, передавая ему необходимое содержимое меню.
В ui-router вы можете сделать это через resolve
свойство каждого маршрута. Например, создайте фабрику, извлеките из нее все возможные состояния меню и вызовите его внутри resolve.
Или вы можете показывать / скрывать элементы меню в соответствии с именем текущего состояния.
На самом деле есть много способов.