Событие не попадает в ng-change - PullRequest
0 голосов
/ 03 сентября 2018

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


app.controller('OrderFormController', function($scope, $http, $filter, $window, $location) {

$scope.names = ['test','test2'];

$scope.retrieveSelectedClass = function(newValue, oldValue, $event) {

alert($event);
}
});
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/html">

<meta charset="utf-8"/>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script>

</head>
<body ng-app="myApp" ng-controller="OrderFormController">
<select ng-model="selectedName" ng-click="event = $event" ng-change="retrieveSelectedClass(selectedName, '{{selectedName}}', event)"
                ng-options="(item.name||item) group by item.groupName for item in names"
                class="code-helper" id="code-helperId">
            <option value="">Select Option</option>
        </select>
        </body>
</html>

Я прочитал, что событие не фиксируется в ng-change.

Поэтому я изменил свой выбор на:

    <select ng-model="selectedName" ng-click="event = $event" ng-change="retrieveSelectedClass(selectedName, '{{selectedName}}', event)"
            ng-options="(item.name||item) group by item.groupName for item in names"
            class="code-helper" id="code-helperId">
        <option value="">Select Option</option>
    </select>

И мой JS:

$scope.retrieveSelectedClass = function(newValue, oldValue, $event) {

}

но событие все еще не определено.

Я использовал это, чтобы обнаружить нажатие клавиши Ctrl:

$scope.retrieveSelectedClass = function(newValue, oldValue, $event) {
var windowsEvent = $window;

if (windowsEvent.event.ctrlKey) {
        windowsEvent.open('/html/apexEditor.html?name=' + newValue.name, '_blank');
        $scope.selectedName = possibleOldValues[0];
        return;
    }
    }

но это не работает в Firefox, так как в Firefox нет $ windows.event. Мне нужно обнаружить клавишу Ctrl и открыть в новой вкладке. Я не могу сделать ann onkeyup или onkeydown, так как это событие всегда будет прослушиваться без необходимости. Кто-нибудь может здесь помочь?

Ответы [ 3 ]

0 голосов
/ 03 сентября 2018

Вы не можете передать событие на ng-change.

ng-change не является директивой для обработки события изменения (я понимаю, что это вводит в заблуждение, учитывая имя), но вместо этого фактически уведомляется, когда вызывается ngModelController. $ SetViewValue () и значение изменяется (потому что ng-change добавляет слушателя в коллекцию $ viewChangeListeners). Так что это как и ожидалось.

Ссылка здесь .

Обход:

Пожалуйста, посмотрите на это Демо .

0 голосов
/ 03 сентября 2018

удалите событие (click) и попробуйте это

$scope.retrieveSelectedClass = function(newValue, $event) {

  alert($event);
  }
});
<meta charset="utf-8"/>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script>

</head>
<body ng-app="myApp" ng-controller="OrderFormController">
<select ng-model="selectedName" ng-change="retrieveSelectedClass(selectedName, $event)"
                ng-options="(item.name||item) group by item.groupName for item in names"
                class="code-helper" id="code-helperId">
            <option value="">Select Option</option>
        </select>
        </body>
</html>
0 голосов
/ 03 сентября 2018

попытка ng-change="retrieveSelectedClass(selectedName, '{{selectedName}}', $event)" мгновенный ng-change="retrieveSelectedClass(selectedName, '{{selectedName}}', event)"

и в js

$scope.retrieveSelectedClass = function(newValue, oldValue, event) { }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...