我正在尝试创建一个加载模板的指令.然后,该模板将被缓存,因此第二次单击不会尝试加载的元素,而是从$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,$templateCache) { $scope.load = function() { $http.get('http://fiddle.jshell.net',{ cache: $templateCache }).then(function(result) { alert('loaded ' + result.data.length + " bytes"); }); } }
我创建了一个模拟我的场景的小提琴:
请注意,您可以按需要点击事件链接多次,但是,如果您单击“单击指令”链接,只能单击“仅点击”一次,如果单击“点击事件”链接,则该链接不起作用.
任何想法都不胜感激.
我已经玩了一下,使用了AngularJS的缓存(在这里描述:
http://docs.angularjs.org/api/ng. $http)
这是一个现场演示:http://jsfiddle.net/4SsgA/
我基本上调整了$http语法,并使用ng-click指令,而不是在指令内注册一个事件监听器(只因为我更喜欢它:))
HTML:
<html ng-app="website"> <body ng-controller="MyController"> <a href='#' ng-click="load()">Click Event</a> <a href='#' click-load ng-click="loadData()">Click Directive</a> </body> </html>
JS:
angular.module('website',attrs) { scope.loadData = function() { $http({method: 'GET',url: 'http://fiddle.jshell.net',cache: true}).then(function(result) { alert('loaded ' + result.data.length + " bytes"); }); } }; }); function MyController($scope,$templateCache) { $scope.load = function() { $http({method: 'GET',cache: true}).then(function(result) { alert('loaded ' + result.data.length + " bytes"); }); } }