【问题标题】:Angular interpolate scope variable in ng-clickng-click中的角度插值范围变量
【发布时间】:2015-05-21 14:31:35
【问题描述】:

如何在 ng-click 中构造作用域变量的名称。 例如,我在 ng-repeat 中有一个表单,其中名称是动态生成的。 我正在使用 x-editable 插件,因此在这种情况下 name 将创建一个名为 {{box.key}}{{$index}}

的范围变量
<div ng-repeat="course in box.value track by $index">    
 <form editable-form name="{{box.key}}{{$index}}">

问题是如何动态访问变量。该按钮也在 ng-repeate div 中。

<button class="btn btn-primary" ng-click="{{box.key}}{{$index}}.$show()">Edit</button>

【问题讨论】:

    标签: angularjs angularjs-ng-click


    【解决方案1】:

    您的表单在 ng-repeat 中声明,它为每个重复的 div 定义一个子范围。因此,为了确保可以从控制器范围访问表单,而不仅仅是从子 ng-repeat 范围访问,请确保您的控制器定义了一个空的表单对象(或数组):

    $scope.forms = {}; 
    

    并且生成的表单名称类似于forms.form1。例如:

    <form editable-form name="forms.{{box.key}}{{$index}}">    
    

    那么在你看来:

    ng-click="showForm(box.key, $index)"
    

    在你的控制器中:

    $scope.showForm = function(key, index) {
        var formName = key + index
        $scope.forms[formName].$show();
    }
    

    【讨论】:

    • 这似乎可行,但我仍然遇到问题,我收到 TypeError: Cannot read property '$show' of undefined when running ng-click="showForm(box.key, $index )" 并且当我 console.log($scope) 时,我找不到作为 $scope 变量的表单名,但对其进行了硬编码,例如formname.$show() 有效
    • 这是因为您的表单是在 ng-repeat 中声明的,它为每个重复的 div 定义了一个子范围。确保您的控制器定义了一个空对象或数组)的表单 ($scope.forms = {};),并且生成的表单名称类似于 forms.form1
    • 但是我原来的答案不起作用,所以我会编辑它。
    • 感谢@JBNizet,我在 jsfiddle.net/xpmLgL69/14 上的 JSFiddle 中得到了这个工作以供参考。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-12
    • 1970-01-01
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多