私は、ユーザーの嗜好に応じて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);
}
};
}]);
たちは、私はそれぞれの固有のIDのために、スタイルを作らSVGグラフィックになるディレクティブの出力をキャッシュする方法を、各コメント用のユーザーIDを渡すことができますと仮定すると:
ここでは省略したバージョンですか?
ありがとうございました。これは私が気にしていたことですが、ディレクティブテンプレートをコンパイルして格納する方法は不明です。そのステップに対処するためにあなたの答えを強化してもよろしいですか? – isherwood
また、 'cache'はどこにありますか? '$ rootScope'を使って同様のことを試しました。明らかに、ディレクティブの子スコープの外に存在する必要があります。 – isherwood
ああ、私はあなたのサンプルコードで十分に近く見ていませんでした。私はあなたの指示にも直接SVGのテンプレートがあったことに気付かなかった。おそらく、それを別のディレクティブの一部としてキャッシュし、それを使ってSVGを表示することになります(基本的に '