Я пытаюсь создать директиву для работы с вкладками «Угловой пользовательский интерфейс».
Основная цель этой директивы - запомнить выбранные вкладки.
Я смотрел на все решения там и никто, кажется, решить эту проблему для вкладок не установленных в контроллере:Директива AngularJS для вкладок BootStrap UI (проблемы с изолированной областью)
<tabset>
<tab heading="Customers" sctab>Customer tab content</tab>
<tab heading="Sales" sctab>Sales Tab Content</tab>
</tabset>
Примечание «sctab» мое имя директивы. Здесь у меня есть следующие работы:
- ушко щелчке он получит набор URL, хэш, как закладка заголовок Name
- Это хэш запоминается при нажатии на ссылку, а затем вернуться назад.
- При загрузке страницы идентифицировать вкладку (или элемент), который соответствует хэш
Однако я запустить в блоке дороги на конечной стадии:
- активации вкладки, которая соответствует URL hash
Для этого я пробовал несколько вещей, которые вы можете увидеть в моем коде ниже. Ни один из них не работал.
Я считаю, что активное состояние задано в переменной-изоляторе для указателя вкладки ui bootstrap, называемого «активным».
ngClass также связан с этой переменной:
ng-class="{active: active, disabled: disable}"
Так в основном здесь я пытался установить активный = верно для закладки в попытке активировать вкладку (не дало никаких результатов).
Прежде чем углубиться в подробности, я остановлюсь здесь, чтобы узнать, есть ли у кого-то идеи, основанные на том, что я пробовал.
Вот моя директива:
angular.module('jonsmodule')
.directive('sctab', ['$rootScope', '$state', '$location', function($rootScope, $state, $location) {
return {
restrict: "A",
link: function (scope, element, attrs) {
/**
* INITIALIZING THE ACTIVE TAB FROM HASH
*/
scope.$watch(
// watch for setting of the element heading (so we know when the bootstrap tabs are loaded)
function() { return element.children().first('p')[0].innerText; },
function (newValue, oldValue) {
// when ui-bootstrap tabs loaded
if (newValue !== oldValue) {
// if hash matches the tab heading name
if ($location.hash() == newValue.trim()) {
/**
* ******** NEED HELP HERE ************
* THE GOAL HERE IS TO SET THE TAB ACTIVE
* it does not work completely
* below is a list of things I tried
*/
//$(element).tab('show'); // .tab is not a function
$(element).addClass('active'); // changes the class but the tab will not change
scope.$$childHead.active = true; // appears to not save
// attrs.$set('ngClass', {active: true, disabled: false}); // this does not appear to change anything
} else {
scope.$$childHead.active = false; // appears to save and the first tab is not selected
}
}
}
);
/**
* CHANGING THE TAB
*/
// get the state (controller)
var current_state = $state.current.name;
// on tab change set the hash
element.on('click', function() {
var tabLabel = element.children().first('p')[0].innerText;
history.pushState(null, null, current_state + '#' + tabLabel);
});
},
};
}]);
Благодарим за отзыв. Я мог бы спуститься по этому маршруту, но нужно сделать директиву, поэтому мне нужно сделать это только один раз и не обновлять каждую страницу/контроллер нашей платформы. –
Я на самом деле указываю, что вы должны сделать это в своей директиве. – Scott