【问题标题】:AngularJS: How to Pass Dynamically-created model name in template to controller?AngularJS:如何将模板中动态创建的模型名称传递给控制器​​?
【发布时间】:2016-09-02 21:01:26
【问题描述】:

我有一个模板,它使用 $index 值在 ng-repeat 指令中动态创建模型名称。这样我就可以增加最终传递的 json 元素标签。这是一个选择各种动态创建的选项之一的字段。形式为:

<ng-model="data.items['item' + ($index+2)]">

这一切都很好。我想使用附加到函数的按钮添加新功能,该函数绑定到该按钮所绑定的任何特定 ng-repeat 实例。此功能清除选项字段。所以在模板方面我这样做:

<ng-click="clearValue()" ng-disabled="!data.items['item' + ($index+2)]">

我想让控制器来接这个。显然,由于控制器不采用 $index 属性,因此这是行不通的。如果我硬编码数字来测试它,如下所示:

$scope.clearValue = function() {
    $scope.data.items.item2 = undefined;
};

效果很好。但当然不会:

$scope.clearValue = function() {
    $scope.data.items['item' + ($index+2)] = undefined;
};

当然,硬编码使它只适用于那个特定的值。值是通过函数动态添加的,因此可能有 1 个、100 个或介于两者之间的任何值。

有什么方法可以让 clearValue 函数获取调用它的任何给定模型,如上表所示?

【问题讨论】:

  • 你能创建一个小提琴来更好地了解你想要做什么吗?

标签: javascript angularjs indexing controller ng-repeat


【解决方案1】:

你可以做的就是在函数参数中将 $index 传回控制器

<ng-click="clearValue(($index+2))" ng-disabled="!data.items['item' + ($index+2)]">

$scope.clearValue = function(index) {
    $scope.data.items['item' + (index)]  = undefined;
};

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-08
    • 1970-01-01
    • 2015-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    相关资源
    最近更新 更多