Angular でタブ インターフェイスを作成したいので、タブを選択angular-ui-bootstrap
しました。中を木枠にTabController
しました<tabset>
。TabService
タブのソースとしてを作成しました。
チケットのリストを含むタブを作成します(この部分はうまく機能します)。リスト内のアイテムをクリックして新しいタブを開きたいと思います。コントローラーは何らかの処理を行ってから、内部にチケットの詳細ビューを含む新しいタブを作成する必要があります
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 を要求することを考えましたが、TabService の責任ではないため、TabController が役に立たなくなります。