我正在嘗試創建一個可以加載模板的指令。然後,模板將被緩存,所以第二次點擊元素時,它不會嘗試加載它,而是最近從$ 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");
});
}
}
我創建了一個小提琴模仿我的情況:
注意,您可以單擊單擊事件鏈接很多次,只要你想,但「點擊指令」鏈接只能使用一次如果您先點擊它,如果先點擊「點擊事件」鏈接,則它完全不起作用。
任何想法,不勝感激。
感謝您的回覆。你說得對,問題在於約束力。我改變了我的代碼來執行$ scope。$ apply就像ng-click那樣工作。看到這裏:http://jsfiddle.net/3ea64/1/ – user43685
哇感謝user43685。這個適用範圍正好是我需要在我的指令中正常工作的事情 – Erich