Имейте длинный список элементов, для некоторых из которых у пользователя есть разрешения для некоторых из них. Как я могу проверить, имеет ли пользователь разрешение для определенного элемента? Я могу загрузить разрешения в контроллере, а затем, когда я повторяю список в ng-repat, вызовите метод, чтобы проверить, есть ли у этого элемента у меня разрешение - элемент находится в массиве разрешений, загруженном ранее. То, что я видел при попытке такого подхода, состоит в том, что из-за двухстороннего переноса данных это занимает много времени - проверка выполняется даже тогда, когда пользователь делает что-то еще на экране - нажатие кнопки - взаимодействие с контроллером. Каким будет наилучший способ реализации этого?
Просто используйте технологию memoization. Проверка разрешений не должна меняться очень часто (я думаю, после формы входа в систему и после выхода из системы). Итак, вы можете сделать что-то вроде:
var memoize = require('lodash.memoize')
var hasPermission = memoize(service.hasPermission)
Если вы хотите очистить кеш, просто вызовите
hasPermission.cache.clear()
Я использовал этот подход в своих проектах с использованием CASL, и он работает довольно быстро
Я обновляю свой пользователь (-> разрешения) только при запуске приложения или изменении маршрута. При этом у меня нет проблем с производительностью в моем центральном методе
$rootScope.authService.hasPermission(roles)
который только проверяет результат, поэтому js не имеет возможности вычислять в шаблоне.