Умная таблица перейти к выбранному элементу

Я использую умную таблицу с нумерацией страниц. Также есть элемент, выбранный по умолчанию (isSelected=true).

Чего я хочу добиться, так это того, что разбивка на страницы переходит на фактическую страницу таблицы, где находится выбранный элемент.

Я попытался получить $scope из разбиения на страницы, чтобы получить доступ к функции selectPage(). Но я не могу получить $scope.

angular.element($('#pagination')).scope()

возвращает контроллер $scope

angular.element($('#pagination')).isolatedScope()

возвращает ноль

Изменить:

Вот plnkr.

Можно ли получить область действия из директивы? Я хочу получить область из этой директивы

Вот таблица html:

<table st-table="table" st-pipe="pipeFunction" st-safe-src="rowCollection" class="table table-striped">
    ...
    <tfoot>
        <tr>
            <td colspan="5">
                <div id="pagination" st-pagination="" st-items-by-page="8" st-template="/scripts/angular/pagination.custom.html"></div>
            </td>
        </tr>
    </tfoot>
</table>

person NinjaOnSafari    schedule 05.01.2016    source источник
comment
если вам нужен угловой материал (я не знаю, что вам нужно), попробуйте следующее: github.com/ иамисти/mdDataTable   -  person Iamisti    schedule 05.01.2016
comment
@Iamisti Меньше всего я хочу заменить плагин, потому что многие из них работают правильно   -  person NinjaOnSafari    schedule 05.01.2016
comment
если бы вы могли привести пример в plunkr или codepen, это было бы здорово :)   -  person Iamisti    schedule 05.01.2016
comment
Не очень понятно, чего вы пытаетесь добиться. Похоже, все, что вам действительно нужно, это фильтр для isSelected   -  person charlietfl    schedule 05.01.2016
comment
@charlietfl смотрите plnkr в отредактированном посте. при инициализации я хочу видеть выбранный элемент (красный) на последней странице.   -  person NinjaOnSafari    schedule 05.01.2016
comment
но если у вас есть несколько выбранных, которые будут отображаться на разных страницах, как это будет работать? Если все, что вам нужно, это сохранить состояние таблицы, см. Persist table state in local storage в документации.   -  person charlietfl    schedule 05.01.2016
comment
@charlietfl невозможно иметь несколько, это одиночный выбор.   -  person NinjaOnSafari    schedule 05.01.2016
comment
Я считаю, что вам нужно будет расширить директиву разбиения на страницы, чтобы иметь возможность установить конкретную страницу. Документы объясняют, как расширить свой собственный.   -  person charlietfl    schedule 05.01.2016
comment
@charlietfl я разместил решение в качестве ответа.   -  person NinjaOnSafari    schedule 05.01.2016


Ответы (2)


Так что мне это удалось, также с выбором по умолчанию.

javascript:

app.directive('stDefaultSelection', function () {
    return {
        require: 'stTable',
        restrict: 'A',
        scope: {
            selection: '=stDefaultSelection',
        },
        link: function link(scope, element, attrs, controller) {

            scope.$watch('selection', function (newValue, oldValue) {
                var selectionMode = 'single',
                    pagination = controller.tableState().pagination;

                //controller.select(newValue, selectionMode); => causes second call of function

                var rows = controller.getFilteredCollection(),
                    indexOfRow = rows.indexOf(newValue),
                    finalPage = Math.ceil(rows.length / pagination.number);

                if (indexOfRow > -1) {
                    controller.slice(finalPage * pagination.number, pagination.number);
                }
            });
        }
    };
});

html:

 `<table st-default-selection="selectedRow" st-table="table" st-safe-src="rowCollection"></table>`
person NinjaOnSafari    schedule 05.01.2016
comment
лично мне не нравится использовать префикс st- для моих собственных расширений, поэтому я знаю, что если я снова использую его в другом проекте, это не то, что является частью модуля таблицы. Но хорошее решение для создания работы - person charlietfl; 05.01.2016

Ах, кажется, я нашел проблему.

Вместо:

angular.element($('#pagination')).isolatedScope()

Попробуйте использовать (без d):

angular.element($('#pagination')).isolateScope()
person Iamisti    schedule 05.01.2016
comment
нет, все еще undefined. Я создал плункер - person NinjaOnSafari; 05.01.2016