我尝试使用angular-ui
标签directive
点击每个标签,从不同的控制器调用不同的功能。
HTML
<tabset>
<tab heading="Reports" ng-controller="ReportsController" ng-click="fetchReports()" id="tab1">
<div> Reports </div>
</tab>
<tab heading="Sales" ng-controller="SalesController" ng-click="fetchSales()" id="tab2">
<div> Sales </div>
</tab>
</tabset>
我收到这样的错误
多个指令[ngController,tab]要求新/隔离范围
要求
I have 5-6 tabs in a page. The page should not load the data of each tab at once. It should only load data for a tab once that tab is being clicked.
解决方案
我有一个解决方案,用tabset
包装parent controller
指令,以便我可以从broadcast
获得ParentController
个来自相应Child
的函数{1}}控制器。
<div ng-controller='ParentController'>
<tabset>
<tab heading="Reports" id="tab1">
<div ng-controller="ChildOneController"> Reports </div>
</tab>
<tab heading="Sales" id="tab2">
<div ng-controller="ChildTwoController"> Sales </div>
</tab>
</tabset>
</div>
问题:
但遗憾的是,我的应用程序中有太多带有标签的页面,我不认为从ParentController
到ChildController
的每个标签的广播事件都是个好主意。
我需要知道什么应该是一个很好的解决方案?
答案 0 :(得分:2)
您可以使用控制器作为语法:
<div ng-controller="ReportsController as reports">
<div ng-controller="SalesController as sales">
<tabset>
<tab heading="Reports" ng-click="reports.fetchReports()" id="tab1">
<div> Reports </div>
</tab>
<tab heading="Sales" ng-click="sales.fetchSales()" id="tab2">
<div> Sales </div>
</tab>
</tabset>
</div>
</div>
以下是控制器的示例:
(function(){
angular
.module('app')
.controller('ReportsController', [
ReportsController
]);
function ReportsController() {
var vm = this;
vm.fetchReports = function () {
// fetch the reports!
};
}
})();
来源:John Papa的角度风格指南建议使用控制器 语法超过$ scope,请参阅style guide。
答案 1 :(得分:1)
在你的情况下,
您应该创建 directive :
通过这种方式,您可以使用
loop
来创建倍数 具有多个控制器的指令。
(function() {
angular
.module('app')
.diretive('directiveTab', function() {
return {
restrict: 'AE',
template: " <div> Reports </div>"//you can use templateUrl as well
scope: {},
controller: ['$scope',
function($scope) {
$scope.function1 = function(pane) {
};
}
],
};
}
})
&#13;
the directive will behave like controller and you can manipulate the content of each tab
<div ng-controller='ParentController'>
<tabset>
<tab heading="Reports" id="tab1">
<directive-tab>
</tab>
</tabset>
</div>
&#13;