Próbuję utworzyć dyrektywę, która załadowałaby szablon. Szablon zostanie zapisany w pamięci podręcznej, więc za drugim razem, gdy klikniesz element, nie będzie on próbował go wczytać, a zamiast tego otrzyma ostatnio załadowaną wartość z $ templateCache.
Zauważam, że w przypadku trafienia w pamięci podręcznej nie otrzymuję żadnej odpowiedzi z metody $ 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");
});
}
}
Utworzyłem skrzypce symulowania mój scenariusz:
pamiętać, że można Click linku zdarzenia tyle razy, ile chcesz, ale „Kliknij dyrektywę” link działa tylko raz jeśli klikniesz pierwszy, to nie działa, jeśli najpierw klikniesz link "Kliknij wydarzenie".
Wszelkie pomysły są bardzo cenne.
Dziękuję za odpowiedź. Masz rację, problem polega na wiązaniu. Zmieniłem kod, aby wykonać $ scope. $ Apply, podobnie jak ng-click i zadziałało. Zobacz tutaj: http://jsfiddle.net/3ea64/1/ – user43685
Wow, dzięki user43685. Ten zakres zastosowania był właśnie tym, czego potrzebowałem, aby http działał poprawnie w mojej dyrektywie. – Erich