2014-09-11 50 views
1
<button id="voterListSearchButton" class="serachButton" ng-click="onSearchButton1Click()">search</button> 

這是我的搜索按鈕:Angularjs單擊發射2次?

$scope.onSearchButton1Click = function() { 
    var partId = $("#partIdSearch").val(); 
    var firstName = $("#firstNameSearch").val(); 
    var lastName = $("#lastNameSearch").val(); 
    var fathersName = $("#fathersNameSearch").val(); 
    var address = $("#address").val(); 
    $rootScope.$broadcast('onSearchButton1Click',partId,firstName,fathersName,lastName,address); 
} 

這是我對上面的按鈕控制器。我廣播這個事件到另一個控制器通過以下方式:

$scope.$on('onSearchButton1Click',function(event,data1,data2,data3,data4,data5){ 
    pId= data1; 
    fname=data2; 
    lname=data3; 
    fathersName=data4; 
    address= data5; 

    VoterDataService.search(data1,data2,data3,data4,data5,0).success(function(response){ 
     $scope.arr = response.search;  
    }); 
}); 

這是我的服務代碼:

voterDataServiceAPI.search = function(data1,data2,data3,data4,data5,pageNo,lang) { 
    var url ="api/search" + "?part_id="+data1 +"&first_name="+data2+"&middle_name="+data3+"&last_name="+data4+"&subpart=" + data5 +"&page_no="+pageNo; 
    return $http({ 
     method : "GET", 
     url:url, 
     headers:{ 
      "content-type": "application/json" 
     } 
    }); 
} 

爲什麼單次點擊火災2倍?

+1

我想你的控制器調用兩次!!! – 2014-09-11 05:50:23

+1

如果您已經創建了一項服務,然後爲什麼要進行廣播,而不是直接從控制器調用服務方法 – Seminda 2014-09-11 05:50:57

+1

您的控制器調用了兩次。如何將控制器綁定到頁面。使用ng-controller或路由?或者兩者都 – Seminda 2014-09-11 05:52:50

回答

0

我希望你獲得從HTML頁面的數據到控制器

在控制器:

$scope.onSearchButton1Click = function() { 
     var partId = $("#partIdSearch").val(); 
     var firstName = $("#firstNameSearch").val(); 
     var lastName = $("#lastNameSearch").val(); 
     var fathersName = $("#fathersNameSearch").val(); 
     var address = $("#address").val(); 

    //calling the service 
    var url ="api/search" + "?part_id="+data1 +"&first_name="+data2+"&middle_name="+data3+"&last_name="+data4+"&subpart=" + data5 +"&page_no="+pageNo; 

    // alert("url"+url); 

     $http({ 
        method: 'GET', 
        url: url , 
        headers: { 
         'Accept': 'application/json', 
         'Content-Type': 'application/json' 
        }, 
       }). 
       success(function (data) { 
        if(data != null && data.length > 0){ 
         $log.info("It is in success of onSearchButton1Click() -------");     
         $scope.searchResult = angular.fromJson(data); 
         $log.info("searchResult Details==============> "+JSON.stringify($scope.searchResult)); 
        }else{ 
          $log.info("searchResult=> in else:"+$scope.searchResult .length); 

         } 

       }). 
       error(function(data, status, headers, config) { 

        $log.info("searchResultUrl=> FAILURE:"); 

       }); 



} 

這樣,您能夠調用服務時,只搜索按鈕,並沒有外部不必要的過用戶點擊調用Web服務。

+0

它仍然發射兩次... – 2014-09-11 08:26:11

+0

我想了解更多信息,現在激活URL下方的警報,並計算它警報和清除瀏覽器中的控制檯多少次並計數$ log.info語句。我需要這些答案更改代碼 – user3812457 2014-09-11 09:18:18

+0

它警告兩次 – 2014-09-11 10:01:04

0

我們必須在應用程序中初始化我們的控制器一次,在上面的問題中,我初始化我的控制器兩次(即在一個html和app.js文件中),這就是爲什麼它初始化兩次,所有函數都被稱爲兩次那是完全錯誤的時間。

0

我有這個問題,然後意識到我有兩個標籤打開在Chrome瀏覽器同時運行我的應用程序。我關閉了其中一個,現在完全沒問題。我覺得我好笨。