У меня есть директива аватара пользователя, которая применяет цвет к нескольким путям в изображении SVG по предпочтению пользователя. Он применяется к каждому комментарию в потоке, который может быть очень длинным, и скомпилирован для каждого пользователя с несколькими комментариями.Как я могу кэшировать директиву AngularJS, которая вызывается повторно для одного и того же пользователя?
Вот сокращенная версия:
angular.module('someModule')
.directive('userAvatar', ['$timeout', '$http', function ($timeout, $http) {
return {
restrict: 'E',
replace: true,
template: '<object type="image/svg+xml" data="/path/user-avatar.svg"></object>',
link: function (scope, element, attrs) {
scope.image = attrs.image;
var init = function() {
$timeout(function() {
var img = scope.image;
var path1, path2, path3;
// here we apply fill color to the paths by path ID
}, 0);
};
var waitForRender = function() {
if ($http.pendingRequests.length > 0) {
// wait for all templates to be loaded
$timeout(waitForRender);
} else {
init();
}
};
$timeout(waitForRender);
}
};
}]);
Предполагая, что мы можем передать идентификатор пользователя для каждого комментария, как я мог бы кэшировать выход директивы, который составляет в стилизованные графики SVG, для каждого уникального идентификатора?
Спасибо. Это то, что я имел в виду, но я не понимаю, как скомпилировать шаблон директивы и сохранить его. Не могли бы вы усилить свой ответ, чтобы ответить на этот шаг? – isherwood
Кроме того, где хранится 'cache'? Я экспериментировал с чем-то похожим с помощью '$ rootScope'. Очевидно, что он должен существовать вне сферы действия директивы. – isherwood
А, я не выглядел достаточно близко к вашему примеру. Я не понимал, что ваша директива также имеет шаблон svg напрямую. Вероятно, вам захочется кэшировать его как часть другой директивы, а затем использовать его для отображения SVG (в основном он имеет шаблон «