Angularjs контроллер в комплекте

0

У меня есть система блога с проектами и статьями.

Люди могут писать статьи и участвовать в их проектах.

Мое угловое приложение использует общий вид архива для отображения любого элемента, но использует пользовательский контроллер на основе того, какой элемент отображать. Например, у меня есть проекты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}
}

но он закручивает иерархию областей, и события не срабатывают правильно, поэтому я не знаю, что еще делать. Любая помощь?

Теги:
angularjs-controller

1 ответ

0

Как насчет использования маршрутизатора, такого как 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.
  • 0
    Хм, знаешь что, это неплохая идея. Я просто не хочу, чтобы URL изменился, хотя.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню