如何在onclick函数内传递角度js变量作为参数

时间:2015-09-03 13:53:19

标签: javascript angularjs angularjs-ng-repeat

我试图在onclick()中传递AngularJS变量作为参数值来调用javascript函数。任何人都可以指导我如何做到这一点吗?

我的代码:

myObject[prop3nameWhichIsPartOfOtherVar] = value; 

9 个答案:

答案 0 :(得分:22)

您应该使用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); };

但是,我无法看到不将其移入您的范围的理由

答案 1 :(得分:4)

如果您仍然想使用onclick,这对我有用,我希望它对您也有用。

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

答案 2 :(得分:1)

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

<强>标记

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

答案 3 :(得分:1)

使用ng-click指令并在控制器范围内具有该功能,很容易实现上述功能,只需要将java脚本函数引用分配给控制器范围变量。无需再次重写示波器中的功能。通过函数的引用就可以了。

<强>标记

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

<强>控制器

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

答案 4 :(得分:1)

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

对于您的情况,

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

See here for documentation of ng-click

希望这有帮助!

答案 5 :(得分:1)

我不会再猜测你没有使用ng-click的原因,因为其他贡献者已经指出你真的应该&#39;。但是,如果你真的想要/需要,请继续使用&#39;这个&#39;和数据属性。

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

答案 6 :(得分:0)

尝试没有花括号 deleteArrival(filterList.id)

答案 7 :(得分:0)

由于窗口绑定,我遇到了无法使用ng-click的情况。没有得到直接答案,但下面的确对我有用。我知道这不是一个好的解决方案,但在我的情况下是可行的。

angular.element(本).scope()。ctrlName.variable

您可以尝试使用自己的类结构。所以点击将如下:

的onclick =&#34;测试(angular.element(本).scope()ctrlName.ObjName.variable。)&#34;

答案 8 :(得分:0)

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

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

javascriptFunction(parameter){
  let variable = parameter
} 

然后在我看来,使用 ng-click,我访问了控制器功能:

 ng-click="controllerFunction()"

对我来说,"onclick="deleteArrival(this.id)" 示例返回 undefined。以上是最好的解决方案。

相关问题