У меня есть система блога с проектами и статьями.
Люди могут писать статьи и участвовать в их проектах.
Мое угловое приложение использует общий вид архива для отображения любого элемента, но использует пользовательский контроллер на основе того, какой элемент отображать. Например, у меня есть проектыArchiveController, который "исправляет" данные api (первая строка - это заголовок, вторая строка - описание) или articleArchiveController (первая строка - название, вторая строка - выдержка).
Все работает нормально.
Теперь я пытаюсь отобразить элементы в виде ряда вкладок для представления профиля человека. Мне нужна вкладка для проектов, одна для статей и т.д. (Есть другие элементы).
Поэтому в моем персонеProfileController я создал простой объект, подобный массиву:
[
{
title: 'Projects',
slug: 'projects',
items: vm.projects,
controller: "ProjectsArchiveController"
},{
title: 'News',
slug: 'news',
items: vm.news,
controller: "NewsArchiveController"
},{
title: 'Insights',
slug: 'insights',
items: vm.insights,
controller: "InsightsArchiveController"
}
];
Поэтому, на мой взгляд, я просто перебираю этот объект с помощью ng-repeat и включаю шаблон архива с правильным контроллером.
<tabset>
<tab ng-repeat="tab in vm.tabs" heading="{{ tab.title }}" active="tab.active">
<div ng-controller="tab.controller" ng-include="'views/archive.html'">
</div>
</tab>
</tabset>
Кроме того, что это не работает, потому что Angular ожидает функцию контроллера, и я предоставляю строку.
Поэтому я попробовал это:
var projectsController = $controller('ProjectArchiveController', {$scope: $scope.$new(), items: vm.projects});
[{
title: 'Projects',
slug: 'projects',
items: vm.projects,
controller: projectsController
}, ...
Но это тоже не работает. Я где-то читал, что должен использовать projectsController.constructor
, поэтому я тоже это пробовал, но в этом случае он говорит, что он не может найти "itemsProvider", несмотря на то, что я кормлю его элементами в синтаксисе $ controller.
Я получил его для работы, написав это:
{
title: 'Projects',
slug: 'projects',
items: vm.projects,
controller: function(){return projectsController}
}
но он закручивает иерархию областей, и события не срабатывают правильно, поэтому я не знаю, что еще делать. Любая помощь?
Как насчет использования маршрутизатора, такого как ui.router:
http://angular-ui.github.io/ui-router/site/#/api/ui.router
myApp.config(function($stateProvider) {
$stateProvider
.state('projects', {
url: "/projects",
templateUrl: "partials/projects.html"
controller: 'ProjectsController'
});
}); //etc.