簡體   English   中英

ng-include中的Angularjs控制器

[英]Angularjs controller in ng-include

我有一個包含項目和文章的博客系統。

人們可以撰寫文章並在他們的項目中成為特色。

我的角度應用程序正在使用通用存檔視圖來顯示任何元素,但是它使用基於要顯示的元素的自定義控制器。 例如,我有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 ,所以我也嘗試了一下,但是在那種情況下,它說它找不到“ 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.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM