我在角度官方文档中找到了一个关于指令的示例,该指令适合我创建Tab元素。网址为:https://docs.angularjs.org/guide/directive在"创建通信指令"。这是关于" Tab"接口。但是我需要对它进行小的修改。
基本上我需要2种" Tab"。第1个就像那里我将tabType
定义为tab
的样本,第二个我只需要没有窗格的标题标题,然后我将tabType
定义为url
。定义为tabType
的{{1}}应该在点击它时链接到另一个页面。
我现在正在做的是,我在tab标头指令范围内放置了一个名为url
的变量/参数,以区分我想要的类型。并将tabType
放在窗格包装器的模板上,使其仅在ng-if
为tabType
时可用。以下是我所做的2条指令的摘要,可在Plunker处找到:
tab
在HTML元素我这样做:
var bngapp=angular.module('BApp',[])
.controller('BCtrl', function($scope){
angular.element(document).ready(function(){
});
})
.directive('biqTab', function(){//named biqTab
return {
restrict : 'E',
transclude: true,
scope : {
tabType : '@'//tab/url
},
controller : ['$scope', function($scope){
var self = this;
var panes = $scope.panes = [];
$scope.click = function(pane) {
angular.forEach(panes, function(pane) {
pane.selected = false;
});
pane.selected = true;
};
self.addPane = function(pane) {
if (panes.length === 0) {
$scope.click(pane);
}
panes.push(pane);
};
}],
template: '<div class="biq-tab">\n\
<ul class="nav nav-tabs">\n\
<li ng-repeat="pane in panes" ng-class="{active:pane.selected}">\n\
<span ng-click="select(pane)">{{pane.title}}</span>\n\
</li>\n\
</ul>\n\
<div>Tab type: {{tabType}}<br> Child length:{{panes.length}}</div>\n\
<div ng-if="tabType===\'tab\'" class="tab-content" ng-transclude></div>\n\
</div>'
};
})
.directive('biqTabItem', function(){
return {
require: '^^biqTab',
restrict: 'E',
transclude: true,
scope: {
title: '@', url:'@'
},
link: function(scope, element, attrs, biqTabCtrl) {
biqTabCtrl.addPane(scope);
},
template: '<div class="tab-pane" ng-show="selected">test item\n\
<div ng-transclude></div>\n\
</div>'
};
});
问题,当我将 <div ng-controller="BCtrl">
<biq-tab tab-type="url">
<biq-tab-item title="Frontpage" url="biqsoft.com">
</biq-tab-item>
</biq-tab>
</div>
更改为&#39; url&#39;,然后将panes.length检测为0,即使它上面有子元素,在Plunker的页面上看到。我认为模板上的任何更改都与我的tabType
一样,不会影响范围内的变量。请注意,如果我使用ng-if
更改ng-if
,它会像我预期的那样正常,但如果ng-show
是&#39; url&#39,我仍然会尝试让它真的不存在;使用tabType
。
任何帮助将不胜感激,提前谢谢。
答案 0 :(得分:0)
ngIf以优先级600执行,您的指令以优先级0执行,因此ngIf在您的指令之前运行。 ngIf的目的是元素的条件创建。当您将类型设置为URL时,永远不会创建元素,并且您的指令实例永远不会链接,因为它们不会像预期的那样存在。由于没有添加任何链接,因此计数为0。
要了解有关ngIf的更多信息,请访问https://docs.angularjs.org/api/ng/directive/ngIf
要得到答案,请提出问题。