2016-05-26 2 views
1

Ich möchte close() -Funktion bei Klick irgendwo in der Seite aufrufen, hat aber nicht funktioniert. Ich habe geschrieben wie:Wie Sie eine Funktion der AngularJS-Anweisung aufrufen, wenn Sie auf eine beliebige Stelle auf der Seite klicken?

var liveSearch = function() { 
return { 
    restrict: "A", 
    scope: { 
     myData: '=', 
     ngModel: '=' 
    }, 
    templateUrl: "/js/app/common/template/livesearch.html", 
    link: function ($scope, element, attrs) { 

     var close = function() { 
      $scope.status = "close"; 
     }; 

     $scope.open = function() { 
      $scope.status = "open"; 
     }; 

     $(document).on('click',function(){ 
      close(); 
     }); 
    } 
}; 
app.directive("liveSearch", liveSearch); 

Bitte helfen, dieses Problem zu lösen.

Edited

<div live-search my-data="data" ng-model="typeId" ></div> 
+0

Können Sie teilen, wie Sie diese Richtlinie verwenden ?? – seekers01

+0

Bitte schauen Sie in den bearbeiteten Abschnitt – vaqifrv

Antwort

0

Sie können einen click Handler schreiben innen link

link:function($scope, element, attrs)){ 
    $scope.close = function(){ 
    // Rest of the code 
    }  
    $('body').on('click',function(event){ 
     $scope.close(); 
     }) 
    } 
+0

Es funktioniert nur einmal nach dem Laden der Seite – vaqifrv

1

Versuchen Sie es mit diesen clickElsewhere Richtlinie klicken Sie irgendwo außerhalb dieses DOM-Objekt zu erfassen.

directive('clickElsewhere', function($parse, $rootScope) { 
     return { 
      restrict: 'A', 
      compile: function($element, attr) { 
       var fn; 
       fn = $parse(attr['clickElsewhere']); 
       return function(scope, element) { 
        var offEvent; 
        offEvent = $rootScope.$on('click', function(event, target) { 
         if (element.find($(target)).length || element.is($(target))) { 
          return; 
         } 
         return scope.$apply(function() { 
          return fn(scope); 
         }); 
        }); 
        return scope.$on('$destroy', offEvent); 
       }; 
      } 
     }; 
    }); 

Sie können es verwenden, wie so in der Vorlage:

<div live-search my-data="data" ng-model="typeId" click-else-where="close()"></div> 
+0

Es funktioniert nur Textfeld Keydown-Ereignis, nicht klicken Ereignis. Diese Anweisung erstellt für Live-Suche und wenn ich versuche, alles in Textbox close() Funktionsaufruf zu suchen. – vaqifrv

+0

vorausgesetzt Direktive Arbeit mit Klick - wie es in deiner Frage und in seinem Code '' '$ rootScope. $ On ('click', ...' '' – shershen

Verwandte Themen