Я недавно начал работать над проектом AngularJs, и я пытаюсь понять, как работают директивы и как их правильно построить.
Моя цель - добавить горизонтальную прокрутку к элементу div, содержащему вкладки, добавивдве кнопки (одна в начале и одна в конце), которые должны отображаться только при наличии прокручиваемого содержимого.Я уже реализовал это непосредственно в своем представлении html, например:
<md-button class="md-icon-button md-mini width-25 no-margin" style="height: inherit; padding: 0px;" ng-click="vm.onTabScroll('left')" ng-if="vm.canScroll('left') == true">
<md-icon md-font-icon="icon-chevron-left" class="icon s26"></md-icon>
</md-button>
<div id="bar-container" layout="row" style="overflow:hidden;">
<div id="tab-container" layout="row" layout-align="start center" style="overflow-x:hidden; overflow-y: hidden; transition: transform .2s ease-in-out;">
[VARIABLE_CONTENT]
</div>
</div>
<md-button class="md-icon-button md-mini width-25 no-margin" style="height: inherit; padding: 0px;" ng-click="vm.onTabScroll('right')" ng-if="vm.canScroll('right') == true">
<md-icon md-font-icon="icon-chevron-right" class="icon s26"></md-icon>
</md-button>
[VARIABLE_CONTENT] содержит вкладки, созданные с помощью ng-repeat:
<div layout="column" ng-repeat="(key, tab) in vm.tabs" ng-click="vm.onClickTab(tab.id)">
<div layout="row" layout-align="space-between center">
<md-icon md-font-icon="{{tab.icon}}" class="icon s16 margin-horizontal-5" ng-class="tab.color + '-fg'"></md-icon>
<span class="text-truncate font-size-12" ng-class="vm.isActiveTab(tab.id) ? 'black-fg' : 'grey-300-fg'"> {{tab.title}}
<span ng-if="tab.badges" class="badge md-white-fg md-red-bg">{{tab.badges}}</span>
</span>
<md-button class="md-icon-button md-mini no-margin" ng-class="vm.isActiveTab(tab.id) ? 'md-primary' : 'grey-300-fg'" aria-label="close" ng-click="vm.closeTab(tab)">
<md-icon md-font-icon="icon-close-circle-outline" class="icon s16"></md-icon>
</md-button>
</div>
<div style="height: 2px" ng-class="vm.isActiveTab(tab.id) ? tab.color + '-bg' : ''"></div>
</div>
Вся логикаобработано в контроллере представления, но я хотел бы создать директиву, чтобы использовать ее в других местах.
Директива:
(function() {
'use strict';
angular
.module('app.core')
.directive('msTabSCroll', msTabSCrollDirective);
/** @ngInject */
function msTabSCrollDirective() {
return {
restrict: 'EA'
};
}
})();
Что я хотел бы понять, так это какскажите директиве, что я хочу, чтобы ее содержимое отображалось внутри div "tab-container".
Кроме того, возможно ли определить шаблон для ng-repeat и внедрить его непосредственно внутри директивы html?И в этом случае, предпочтительнее ли определять его каждый раз вручную?