Javascript 如何将onclick函数中的angular js变量作为参数传递

Javascript 如何将onclick函数中的angular js变量作为参数传递,javascript,angularjs,angularjs-ng-repeat,Javascript,Angularjs,Angularjs Ng Repeat,我尝试在onclick()内将AngularJS变量作为参数值传递,以调用javascript函数。有人能指导我怎么做吗 我的代码: <div onclick="deleteArrival({{filterList.id}})" class="table-icon deleteIcon">{{filterList.id}}</div> {{filterList.id} 您可以使用ng click轻松解决问题,但您应该在自己的范围内使用deleteArrival方法 标

我尝试在onclick()内将AngularJS变量作为参数值传递,以调用javascript函数。有人能指导我怎么做吗

我的代码:

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

您可以使用
ng click
轻松解决问题,但您应该在自己的范围内使用
deleteArrival
方法

标记

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

{{filterList.id}

试着不用花括号
deleteArrival(filterList.id)

您应该使用ng click,没有理由使用onclick,因为angular为您提供了此功能

<div ng-click="deleteArrival(filterList.id)" 
     class="table-icon deleteIcon">{{filterList.id}}</div>
如果您确实需要使用onclick来调用外部函数,您可以在您的作用域中将函数更改为类似以下内容,仍然使用上面的ng click属性:

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

然而,我看不出有什么理由不将其移动到您的作用域中

上面的事情可以很容易地使用
ng click
指令并将该函数置于控制器作用域中,唯一的问题是您需要将java脚本函数引用分配给控制器作用域变量。无需再次在您的作用域中重写函数。传递函数的引用将完成此操作

标记

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

不允许在angularjs中为事件处理程序属性(如onclick、onload、onsubmit等)创建绑定,因为, 绑定到这些属性没有实际价值,这样做只会使应用程序暴露于XSS之类的安全漏洞。由于这些原因,angularjs不支持绑定到事件处理程序属性(所有以on和formaction属性开头的属性)

对于你的情况

ng repeat
中,使用
ng click
向函数发送值,并在控制器中声明该函数


希望这有帮助

我不会再猜测你不使用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"));
}
{{filterList.id}
函数deleteArrival(arrivalElem){
警报('myId='+arrivalleem.getAttribute(“数据过滤器列表”);
}

由于窗口绑定,我无法使用ng click。没有得到直接的回答,但下面的内容确实对我有用。我知道这不是一个好的解决办法,但对我来说是可行的

angular.element(this.scope().ctrlName.variable

您可以尝试使用自己的类结构。因此,单击将如下所示:


onclick=“test(angular.element(this.scope().ctrlName.ObjName.variable)”

如果您仍然想使用onclick,这对我来说是有效的,我希望它也能对您有效

<div id="{{filterList.id}}" onclick="deleteArrival(this.id)" class="table-icon deleteIcon">{{filterList.id}}</div>
{{filterList.id}
$scope.getpop=函数(id){
警报(id);
}
{{x.title}

这对我来说太完美了我的用例是,我的应用程序依赖于一个大型JavaScript文件,该文件包含的函数不是用Angular编写的。为此,我在控制器中添加了一个连接到以下JS函数之一的函数:

$scope.controllerFunction = function() {
  javaScriptFunction('foo');
}

javascriptFunction(parameter){
  let variable = parameter
} 
然后,在我看来,利用ng click,我通过以下方式访问控制器功能:

 ng-click="controllerFunction()"

对我来说,“onclick=“deleteArrival(this.id)”示例返回未定义的结果。以上是最好的解决方案。

是的,我建议他在使用angularJS时使用
ng click
。我需要使用onclick('hi');像这样。但是数据是从ng repeat获得的。我理解你的想法。但是我需要这样。我想调用javascript函数。所以我问它bro@gauravbhavsar我添加了注释,因为您说
不需要使用{{}在ng内单击
,尽管用户使用了
onclick
@PankajParkar ah!Thanks@gauravbhavsar现在看起来好多了+1您没有使用
onclick
有什么特殊原因吗?使用
ng click
应该很好在我的情况下,使用onclick而不是ng click的原因是使用实用程序类中的函数ss我在多个项目中重复使用。这样我就不必将函数重写到每个控制器中。我面临着类似的问题。我可以列出我不想使用范围的原因…但我真的不明白为什么angular不能只允许“onclick”“像其他属性一样,他可能希望使用onclick而不是ng click的原因有很多,我们最明显的是,他依赖的是一个大型javascript库,它不是用Angular编写的。至少对我来说,这是有实用价值的。onclick=“legacyOrGlobalMethod({{product.id}})”太棒了!谢谢。我无法使用ng click的原因是。在此手风琴中,标题默认用于展开/折叠内容。为了防止展开/折叠并进行自定义操作,我必须使用ng click来处理$event.preventDefault()和$event.stopPropagation(),然后再次单击以执行自定义操作。这对单个变量有效,如何使用ng repeat中的“item In items”作为示例来执行此操作?发送完整的“项目”供参考,我有一个情况,我有一个指令,只能通过单击它来触发,但我需要通过单击另一个元素来实际触发它。在控制台中调用document.querySelector(“#directive id”).click()是可行的,但是当我将该脚本移动到元素上的ng click函数中时,我实际上需要单击它,这会引发一系列范围错误。结果证明,使用这种方法非常有效!谢谢您可以通过引入自己的属性来添加所有类似的参数;p1、p2、p3:如果有人需要将数据传递到angularjs范围之外,这个答案可能会很有帮助