在 ng-repeat 中为 ng-click 查找范围

Posted

技术标签:

【中文标题】在 ng-repeat 中为 ng-click 查找范围【英文标题】:Finding scope inside ng-repeat for ng-click 【发布时间】:2018-03-12 18:57:40 【问题描述】:

我有一个非常复杂的嵌套角度对象。 现在在对象的末尾 ng-click 不起作用。

我阅读了角度范围是如何工作的,并且我得到了 ng-click 为循环中的每个项目创建一个子范围。 我没有得到的是,如果 ng-click 在范围内找不到我尝试调用的函数,它如何找到返回范围的函数。

我的意思是:

mainApp.controller('fileController', function ($scope) 

    $scope.function_ngclick_cant_get = function ()
    // stuff here
    ;

    $scope.getMyCtrlScope = function() 
        return $scope;   
   

这是btn

<button class="btn btn-default" type="submit" value="Submit" ng-click="getMyCtrlScope().function_ngclick_cant_get();">call function</button>

如果我直接调用 'function_ngclick_cant_get' 它将不起作用。 如果我像示例中那样调用它,它会起作用。

但是为什么它会起作用呢?它们在同一范围内。

【问题讨论】:

它有效。你必须有 typeo 或 plnkr.co/edit/bXgN9MDGq1IFkOrXIUnc?p=preview 我知道它有效...我只是想了解原因。 好的,我将尝试解释更多 - 当对象包含许多嵌套的 ng-repeats 时,nc-click 停止工作。我有大约 6 个。请参阅此处:***.com/questions/46513069/… 我解决了问题 - 我只是不支持它为什么有效。 【参考方案1】:

好吧,我可能是错的,因为我不确定您要做什么,但是您为什么要设置返回 $scope 的函数?你可以简单地做没有任何回报或范围。

向控制器中的 $scope 对象添加属性时,视图 (html) 可以访问这些属性。 所以你的代码应该是这样的:

<button class="btn btn-default" type="submit" value="Submit" ng-click="function_ngclick_cant_get();">call function</button>

您可以在 w3schools 上查看范围:https://www.w3schools.com/angular/angular_scopes.asp

更新:

我准备了一些虚拟代码来显示您可以使用 ng-click 多次 ng-repeats:

https://jsfiddle.net/pegla/2e4w3yuo/10/

因此,不需要返回 $scope 的函数,并且您的代码似乎在某处有问题,发布更多代码将其放在小提琴或某处,我们也许可以提供帮助。

【讨论】:

好的,我会尝试解释更多——当对象有许多嵌套的 ng-repeats 时,nc-click 停止工作。我有大约 6 个。请参见此处:***.com/questions/46513069/... 我解决了这个问题 - 我只是不支持它为什么有效。顺便说一句,直接调用该函数不起作用。不在完整代码中。 我更新了我的答案,你可以清楚地看到,我有多少次 ng-repeats 并不重要,我仍然可以访问 $scope 和上面的函数。

以上是关于在 ng-repeat 中为 ng-click 查找范围的主要内容,如果未能解决你的问题,请参考以下文章

动态 id ng-repeat

在 ng-repeat 中向 ng-click 函数添加参数似乎不起作用

使用 ng-click 更改 ng-repeat 循环内的值

angular 中父元素ng-repeat后子元素ng-click失效

ng-repeat 内的 ng-click 不适用于 :focus 和 display

当点击另一个 div 时,在 ng-repeat 中隐藏一个 div on ng-click