Как передать angular переменную js внутри функции onclick в качестве параметра

Я попытался передать переменную AngularJS в качестве значения аргумента внутри onclick(), чтобы вызвать функцию javascript. Может ли кто-нибудь вести меня о том, как это сделать?

Мой код:

 <div onclick="deleteArrival({{filterList.id}})" class="table-icon deleteIcon">{{filterList.id}}</div>

Ответ 1

Вы должны использовать ng-click, нет причины использовать onclick, поскольку angular предоставляет вам эту функциональность

<div ng-click="deleteArrival(filterList.id)" 
     class="table-icon deleteIcon">{{filterList.id}}</div>

Затем вы должны перенести свою функцию в свой контроллер AngularJS и привязать ее к области

$scope.deleteArrival = function(filterListId) { ... };

Если вам необходимо использовать onclick для вызова внешней функции, вы можете изменить функцию на что-то подобное в своей области, все еще используя атрибут ng-click выше:

$scope.deleteArrival = function(filterListId) { window.deleteArrival(filterListId); };

Однако я не вижу причины не перемещать его в область видимости

Ответ 2

Вы можете легко решить свою проблему, используя ng-click, но у вас должен быть метод deleteArrival в вашей области.

Разметка

<div ng-click="deleteArrival(filterList.id)" class="table-icon deleteIcon">
  {{filterList.id}}
</div>

Ответ 3

Выше всего легко использовать директиву ng-click и иметь эту функцию внутри области контроллера, только вам нужно назначить ссылку на функцию java-script на переменную области управления. Не нужно снова переписывать функцию в вашем поле. Передача ссылки на функцию сделает трюк.

Разметка

<div ng-click="deleteArrival(filterList.id)" class="table-icon deleteIcon">
   {{filterList.id}}
</div>

контроллер

//assign javascript method reference in controller
$scope.deleteArrival = deleteArrival;

Ответ 4

Вам не разрешено создавать привязку для атрибутов обработчика событий, таких как onclick, onload, onsubmit и т.д. в angularjs, потому что, нет никакой практической ценности в привязке к этим атрибутам, и поэтому он предоставляет только ваше приложение для уязвимостей безопасности, таких как XSS. По этим причинам привязка к атрибутам обработчика событий (все атрибуты, начинающиеся с атрибута on и formaction) не поддерживается в angularjs.

В вашем случае

Внутри ng-repeat используйте ng-click для отправки значений в вашу функцию и объявите эту функцию в контроллере.

См. здесь документацию по ng-click

Надеюсь, это поможет!

Ответ 5

попробуйте это без фигурных скобок deleteArrival (filterList.id)

Ответ 6

Я не буду упускать из виду ваши причины не использовать ng-click, поскольку другие участники указали, что вы действительно "должны". Однако, если вы действительно хотите/нуждаетесь в этом, предложите мое предложение с помощью 'this' и атрибутов данных.

<div data-filterListId="{{filterList.id}}" onclick="deleteArrival(this)" class="table-icon deleteIcon">{{filterList.id}}</div>
function deleteArrival(arrivalElem) {
    alert('myId=' + arrivalElem.getAttribute("data-filterListId"));
}

Ответ 7

У меня был случай, когда я не мог использовать ng-click из-за привязки окна. Не получил прямого ответа, но нижеследующее работало для меня. Я знаю, что это нехорошее решение, но оно работает в моем случае.

angular.element(это).scope(). CtrlName.variable

Вы можете попробовать использовать свою собственную структуру классов. Таким образом, клик будет выглядеть следующим образом:

OnClick = "тест (angular.element(это).scope(). CtrlName.ObjName.variable)"

Ответ 8

Если вы все еще хотите использовать onclick, это работа для меня, я надеюсь, что это сработает и для вас.

<div id="{{filterList.id}}" onclick="deleteArrival(this.id)" class="table-icon deleteIcon">{{filterList.id}}</div>