【问题标题】:callback function undefined in ng-click function using ng-repeat in angularjs使用angularjs中的ng-repeat的ng-click函数中未定义的回调函数
【发布时间】:2015-12-17 18:01:33
【问题描述】:

我很难在 ng-repeat 下的 ng-click 中调用回调函数。 下面是sn-p。

它正在调用 ng-click 函数,但是当调用回调函数时 - 它失败 - 未定义 - cb 不是函数 消息

HTML 部分

<div ng-repeat="item in items">
  <span ng-click="itemClick(cb)">{{item}}</span>
</div>

Javascript

....
<script type="text/javascript">
  function cb(){
     alert('Hey');
  }
</script>

角度

...
$scope.itemClick = function(cb) {
    cb();
};

我是角度新手。

【问题讨论】:

  • 角度函数错误,这样写 $scope.itemClick = function(cb) {........},可能会有帮助
  • itemClick(item) 是您可能想要实现的目标。
  • @JinnaBalu 这是一个拼写错误 - 我只是输入它们,无论如何它现在格式正确,与我的代码相同。
  • 在 itemClick 函数中,您将 'cb' 作为变量传递,该变量未使用并且您正在尝试调用 cb() 方法。在 ng-click=ItemClick(cb) 上的 Html 中,您如何获得 cb 变量。你能把完整的代码发给你吗

标签: angularjs angularjs-ng-repeat ng-repeat angularjs-ng-click


【解决方案1】:

这是因为在编写 &lt;span ng-click="itemClick(cb)"&gt;{{item}}&lt;/span&gt; 时,您希望 cb 是作用域上的属性,但事实并非如此。

像这样将函数放在全局范围内并不是很好的做法,就像您尝试使用 cb 一样。为什么你不能直接在$scope.itemClick-function 中编写任何你想运行的代码(alert('hey'))?

【讨论】:

  • alert('hey') 只是一个例子——实际上我将展示显示模式。我想在定义模态的html文件上打开模态。
  • 所以把它放在作用域函数中。也像@Jinna Balu 指出的那样。您的范围函数不是真正有效的 javascript
  • 正如 Gustav 提到的,您不能在解析的表达式中访问“非角度变量”
  • @Mephiztopheles 和 Gustav 明白了你的意思 - 但是在控制器函数中打开模式对话框或其他与 DOM 相关的东西是个好主意吗?
  • 当然,有用于此目的的服务。 angular ui bootstrap 例如有一个$modal-service,你可以从你的控制器中使用它
【解决方案2】:

angular 将替换 itemClick(cb)
有点
v1[...];var v0;if("cb" in s){v0 = s.cb} else if("cb" in l){v0 = l.cb} return v1(v0)

s 是作用域,l 是当您想将变量传递给您在指令中定义的函数时可以定义的对象:{click:"&amp;"}
当你想调用点击函数时,你做$scope.click({$event:event}),这个对象将作为l传递。
因此您的全局创建的 cb 在您的范围内不可用。

问候

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-12
    • 1970-01-01
    • 2018-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多