當我點擊一個按鈕時,控制器將從某個$http
服務回調函數獲取數據,並且將在$scope
上獲取它的$broadcast
。然後,在指令中,我有一個監聽器來獲取數據並執行一些邏輯。但是,當我在按鈕上使用多種格式的ng-repeat
時,當我單擊每個按鈕時,所有ng-repeat
項目的偵聽器都會被觸發。我如何才能讓偵聽器只爲點擊按鈕而被解僱?請參閱下面的示例代碼。如何在使用ng-repeat時使用角度監聽器?
var app = angular.module('demoApp', []);
app.controller('MyCtrl', function($scope){
\t \t var myCtrl = this;
\t \t myCtrl.getFile = function(){
var response = 'some data';
\t \t \t $scope.$broadcast('downloadFile', {'response': response});
\t \t }
\t });
app.directive('fileDownload', function(){
\t \t return {
\t \t \t restrict: 'A',
\t \t \t link: function(scope, elem, attrs){
\t \t \t \t var cancelEvent = scope.$on('downloadFile', function(event, args){
\t \t \t \t \t console.log('called', args);
\t \t \t \t });
\t \t \t \t scope.$on('$destroy', function(){
\t \t \t \t \t cancelEvent();
\t \t \t \t });
\t \t \t }
\t \t }
\t });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="demoApp">
<div ng-controller="MyCtrl as myCtrl">
<button ng-repeat="format in ['TXT','PDF','CSV']" ng-click="myCtrl.getFile()" file-download>{{ format }}</button>
</div>
</div>
實際上有三個指令實例存在,所以它調用三次可以讓我知道你想要做什麼? –
我想要使用屬性指令將文件下載到按鈕上時。該按鈕綁定到'ng-click'控制器方法,該方法使用'$ http'請求獲取文件數據,然後數據將被指令處理以顯示。我知道這個指令有三個實例,這就是數據被指令處理三次的原因。我的問題是如何使指令僅處理點擊項目的數據一次? – mhdslm