ng-include

时间:2015-06-26 10:38:38

标签: javascript angularjs angularjs-controller

我有一个包含项目和文章的博客系统。

人们可以写文章并在他们的项目中出现。

我的角度应用程序使用通用归档视图来显示任何元素,但它使用基于要显示的元素的自定义控制器。例如,我有projectsArchiveController,它可以纠正" api数据(第一行是标题,第二行是描述),或者articleArchiveController(第一行是标题,第二行是摘录)。

一切正常。

现在,我正在尝试在人员资料视图中显示一系列标签中的元素。我想要一个项目的标签,一个用于文章等。(还有其他元素)。

所以在我的personProfileController中我创建了一个类似于数组的简单对象:

        [
            {
                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,所以我也试过了,但在那种情况下,它说它无法找到&#34; itemsProvider&#34;尽管我正在喂食他是$ controller语法中的项目。

我写这篇文章是为了工作:

{
    title: 'Projects',
    slug: 'projects',
    items: vm.projects,
    controller: function(){return projectsController}
}

但它搞砸了范围层次结构并且事件没有被正确触发,所以我不知道还能做什么。有什么帮助吗?

1 个答案:

答案 0 :(得分: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.