テンプレートをロードするディレクティブを作成しようとしています。テンプレートはキャッシュされるため、要素を 2 回目にクリックすると、要素は読み込まれず、代わりに $templateCache から最近読み込まれた値が取得されます。
キャッシュ ヒットの場合、 $http.get() メソッドから応答がないことに気付きました。
<html ng-app="website">
<body ng-controller="MyController">
<a href='#' ng-click="load()">Click Event</a>
<a href='#' click-load>Click Directive</a>
</body>
</html>
angular.module('website', []).directive('clickLoad', function($q, $http, $templateCache) {
return function(scope, element, attrs) {
function loadData() {
$http.get('http://fiddle.jshell.net', {
cache: $templateCache
}).then(function(result) {
alert('loaded ' + result.data.length + " bytes");
});
}
element.bind('click', loadData);
};
});
function MyController($scope, $http, $templateCache) {
$scope.load = function() {
$http.get('http://fiddle.jshell.net', {
cache: $templateCache
}).then(function(result) {
alert('loaded ' + result.data.length + " bytes");
});
}
}
シナリオをシミュレートするフィドルを作成しました:
クリック イベント リンクは何度でもクリックできますが、「クリック ディレクティブ」リンクは、最初にクリックした場合は 1 回しか機能しません。最初に「クリック イベント」リンクをクリックすると、まったく機能しません。
どんなアイデアでも大歓迎です。