我想用 Angular 创建一个选项卡界面,我选择angular-ui-bootstrap
了选项卡。我TabController
用<tabset>
里面装了一个。我创建了一个TabService
作为选项卡的来源。
我在标签上创建了一个包含门票列表的标签(这部分效果很好),我现在想通过单击列表中的项目来打开一个新标签。控制器应该做一些事情,然后在里面创建一个带有工单详细视图的新选项卡
选项卡服务
angular.module('vendor.services').factory('TabService', [ '$q', function ($q) {
'use strict';
var tabs = [
{
title: "Tab Title",
icon: "glyphicon-user",
content: '<ticket-list></ticket-list>',
closable: false
}
];
function getTabs() {
var deferred = $q.defer();
deferred.resolve(tabs);
return deferred.promise;
}
function addTab(tab) {
var deferred = $q.defer();
tabs.push(tab);
return deferred.promise;
}
return {
getTabs : getTabs,
addTab : addTab
};
}]);
控制器
angular.module('vendor').controller('TabController', ['$scope', 'TabService', function ($scope, TabService) {
'use strict';
TabService.getTabs().then(function (tabs) {
$scope.tabs = tabs;
});
$scope.addTab = function(type, index) {
var tab = {
title: "Tab Title",
icon: "glyphicon-user",
content: '<ticket>',
closable: true
};
TabService.addTab(tab);
};
}]);
模板(玉)
.col-lg-12.tabs(ng-controller="TabController")
tabset
tab(ng-repeat="tab in tabs")
tab-heading
span.glyphicon(ng-class="tab.icon", ng-show="tab.icon")
span(compile="tab.title")
a(ng-click="removeTab($index)", href='', ng-show="tab.closable")
i.close ×
.tab-content(compile="tab.content")
指示
angular.module('vendor.directives').
directive('ticketList',[ function () {
'use strict';
function ticketCtrl ($scope, TicketService) {
TicketService.getTickets().then(function(tickets) {
$scope.tickets = tickets;
});
$scope.openTicket = function(id) {
$scope.addTab("ticket", id);
};
}
return {
restrict: 'E',
controller: ['$scope', 'TicketService', function($scope, TicketService) {
return ticketCtrl($scope, TicketService);
}],
templateUrl : "directives/ticketList.html",
scope : {
ngModel: '='
},
require: '?^TabController',
link: function () {
}
};
}]);
在选项卡中,我编译了一些指令,例如项目列表。我现在希望能够调用addTab
TabController 上的函数。我试图这样做,require: '?^TabController'
但它无法解析控制器。
我想当 angular-ui 创建一个孤立的范围时会有一些问题,但也许我只是遗漏了一些东西。我刚开始使用指令,我想在指令中要求 TabService,但这会使我的 TabController 有点无用,因为它不是 TabService 的责任。