0

Ich habe eine Liste mit Optionen, die ich in eine Auswahl mit ng-options Schleife. Dann würde ich gerne eine Funktion aufrufen, wenn ich auf eine der Optionen klicke. Ich versuchte es zuerst mit ng-change, aber das Problem, das ich hatte, ist, dass ich eine Änderung nicht feststellen kann, wenn ich die gleiche Option zweimal nacheinander anklickte, so dass es nur die Funktion aufruft, wenn ich das erste Mal darauf klicke. Dann habe ich es mit ng-click versucht. Das Problem war jetzt, dass es auch den Klick erkennt, wenn ich das Dropdown öffne. So nennt es dann auch die Funktion. Gibt es eine Möglichkeit, den Klick zu ignorieren, wenn ich das Dropdown öffne und es nur beim Klick auf eine Option erkenne? Ich habe auch versucht, den $event als Parameter in meiner Funktion anzugeben und dort zu überprüfen, ob die Option angeklickt wurde, aber ich habe die Lösung nicht gefunden. Dies ist mein Code:Ignorieren ng-Klick beim Öffnen Dropdown

<select ng-options="option as option.name for option in myOptionsList" ng-model="currentOption" ng-click="myFunction($event)"></select> 

Meine Liste:

myOptionsList = [ 
    {id: 1, name: 'Option 1'}, 
    {id: 2, name: 'Option 2'}, 
    {id: 3, name: 'Option 3'} 
]; 

Meine Funktion:

myFunction(event) { 
    console.log(event); 
    console.log('Print this if only option was clicked!'); 
} 

Irgendwelche Ideen, wie ng-click zu ignorieren, wenn ich die Drop-down nur öffnen und erkennen es, wenn option wurde geklickt, oder wie erkennt man ng-change, wenn der ausgewählte option erneut angeklickt wurde? Vielen Dank.

============================================== =========================

EDIT - Beispiel: ich habe ein Fenster, in dem ich eine Liste filtern. Dieses Fenster öffne ich mit einer Option in meiner Auswahl. Wenn ich die Auswahl öffne, wird das Fenster geöffnet. Stellen Sie sich nun vor, dass ich einige Filterkriterien festlege, das Fenster schließe und meine Liste jetzt gefiltert wird. Die Option, mit der der Filter geöffnet wird, ist weiterhin ausgewählt. Jetzt sehe ich, dass ich meine Filterkriterien ein wenig ändern muss, also öffne ich das Dropdown erneut und klicke ein zweites Mal auf die Option, um das Fenster zu öffnen, aber ID funktioniert nicht, weil es immer noch ausgewählt ist und ng- Änderung hat keine Änderungen in der Auswahl erkannt. Wie kann ich diese Kraft:

angular.module("myApp", []).controller("myController", function($scope) { 
 
    $scope.currentOption; 
 
    $scope.showWindow = false; 
 

 
    $scope.myOptions = [{ 
 
    id: 1, 
 
    name: 'This opens the window' 
 
    }, { 
 
    id: 2, 
 
    name: 'Option 2' 
 
    }, { 
 
    id: 3, 
 
    name: 'Option 3' 
 
    }]; 
 

 
    $scope.showOption = function() { 
 
    if ($scope.currentOption.id == 1) { 
 
     $scope.showWindow = true; 
 
    } 
 
    console.log($scope.currentOption); 
 
    } 
 

 
    $scope.closeWindow = function() { 
 
    $scope.showWindow = false; 
 
    } 
 
});
.filterWindow { 
 
    width: 100px; 
 
    height: 100px; 
 
    background-color: rgba(50, 50, 50, 0.5); 
 
    z-index: 100; 
 
    margin-top: 20px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 

 
<div ng-app="myApp" ng-controller="myController"> 
 
    <select ng-options="option as option.name for option in myOptions" ng-change="showOption()" ng-model="currentOption"></select> 
 

 
    <div ng-if="showWindow" class="filterWindow"> 
 
    <button ng-click="closeWindow()">Close</button> 
 
    Some filter criterias... 
 
    </div> 
 
</div>

Thanks again

Antwort

2

Verwenden Sie stattdessen:

<select ng-options="option as option.name for option in myOptionsList" 
     ng-model="selectedItem" ng-change="update()"> 
</select> 

-Controller

$scope.myOptionsList = [ 
    {id: 1, name: 'Option 1'}, 
    {id: 2, name: 'Option 2'}, 
    {id: 3, name: 'Option 3'} 
]; 
    $scope.update = function() { 
    console.log($scope.selectedItem) 
    } 
Hier

ist die Arbeits JS FIDDLE Link: http://jsfiddle.net/jazibbashir/G8S32/1855/

================================== ========================================

New Requirment Lösung

Ersetzen Sie einfach ng-change mit ng-click.

angular.module("myApp", []).controller("myController", function($scope) { 
 
    $scope.currentOption; 
 
    $scope.showWindow = false; 
 

 
    $scope.myOptions = [{ 
 
    id: 1, 
 
    name: 'This opens the window' 
 
    }, { 
 
    id: 2, 
 
    name: 'Option 2' 
 
    }, { 
 
    id: 3, 
 
    name: 'Option 3' 
 
    }]; 
 

 
    $scope.showOption = function() { 
 
    if ($scope.currentOption.id == 1) { 
 
     $scope.showWindow = true; 
 
    } 
 
    console.log($scope.currentOption); 
 
    } 
 

 
    $scope.closeWindow = function() { 
 
    $scope.showWindow = false; 
 
    } 
 
});
.filterWindow { 
 
    width: 100px; 
 
    height: 100px; 
 
    background-color: rgba(50, 50, 50, 0.5); 
 
    z-index: 100; 
 
    margin-top: 20px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 

 
<div ng-app="myApp" ng-controller="myController"> 
 
    <select ng-options="option as option.name for option in myOptions" ng-click="showOption()" ng-model="currentOption"></select> 
 

 
    <div ng-if="showWindow" class="filterWindow"> 
 
    <button ng-click="closeWindow()">Close</button> 
 
    Some filter criterias... 
 
    </div> 
 
</div>

+0

Hallo, aber diese Arbeit scheint nicht, wie ich möchte ... Öffnen Sie sind Konsole, als die Auswahl öffnen wählen ‚Option 1‘, wird es gedruckt werden ... als Öffnen Sie erneut die Konsole und wählen Sie erneut die 'Option 1', die bereits ausgewählt ist ... nichts passiert und die Funktionen nicht aufgerufen wird? Aber ich möchte die Funktion auch aufrufen, wenn ich zweimal hintereinander auf die gleiche Option klicke ... – MrBuggy

+0

Ich kann dein Problem nicht erstellen Alles funktioniert perfekt an meinem Ende check out this fiddle: http://jsfiddle.net/ Jazibbashir/G8S32/1855/ oder wenn Sie Doppelklick als Winkel Anweisung definieren möchten, die Funktion bei Doppelklick auslösen. Sagen Sie mir, wenn Sie nur Hilfe in Bezug auf Doppelklick-Richtlinie etc. benötigen. –

+0

Hallo, bitte schauen Sie sich meine Bearbeitung (das Beispiel mit dem Code-Schnipsel) und lesen Sie die Beschreibung davon .... Das ist, was ich tun möchte. .. Sie können es dort simulieren ... Ich hoffe, es ist jetzt klar genug .. :) danke – MrBuggy

1

Wir können dies mit wenig Hack erreichen.

Beispiel für jsfiddle.

var myApp = angular.module('myApp', []); 
 

 
function MyCtrl($scope) { 
 
    $scope.myOptionsList = [{ 
 
    id: 1, 
 
    name: 'Option 1' 
 
    }, { 
 
    id: 2, 
 
    name: 'Option 2' 
 
    }, { 
 
    id: 3, 
 
    name: 'Option 3' 
 
    }]; 
 
    $scope.update = function($event) { 
 
    if ($event.screenX == 0) 
 
     console.log('click on OPTION'); 
 
    else 
 
     console.log('click on SELECT'); 
 
    } 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="myApp" ng-controller="MyCtrl"> 
 
    <select ng-options="option as option.name for option in myOptionsList" ng-model="selectedItem" ng-click="update($event)"> 
 
    </select> 
 
    {{selectedItem.id}} {{selectedItem.name}} 
 
</div>

+0

Was macht screenX eigentlich? Prost – MrBuggy

+0

Während des Tests habe ich festgestellt, dass, wenn das Ereignis 'ng-click' auf **

+0

Hi, ich habe es auch im IE getestet, es gibt immer "Klick auf SELECT" in der Konsole (auch wenn ich auf eine Option klicke). Also diese Lösung funktioniert nicht bei jedem Browser ... Aber danke ... – MrBuggy

Verwandte Themen