【问题标题】:Angular way of binding elements of the same name together将同名元素绑定在一起的角度方式
【发布时间】:2015-12-22 05:10:42
【问题描述】:

在 Angular 中,我有一个复选框列表,这些复选框都绑定到我从 json 获得的布尔值:

<div ng-repeat="err in rec.errorList"><input type="checkbox" ng-model="err.ignore" name="{{err.errorCode}}" ng-value="err.errorCode"  check-all="{{err.errorCode}}" /></div>

但与此同时,我正在尝试检查所有具有相同名称的复选框,同时检查其中一个复选框!

以角度方式做到这一点的最佳方法是什么?我的意思是有没有办法将所有这些复选框与相同的 Name 属性绑定在一起? 我试图写一个指令,像这样,但不知道我应该如何继续:

.directive("checkAll", function(){
    return {
        link: function(scope, element, attr){
            element.bind('change', function(){
                var errorCode = attr["checkAll"];
                var elms = scope.errorCode;             
            })
        }
    }
})

这是我真正想做的事情 http://plnkr.co/edit/sLXGlXRh9vu7FETDmJd1?p=preview 我可以有很多列表,我想要的是每当我点击其中一个复选框时,使用相同的 errorCode 更新所有复选框,可能不会再次循环所有这些错误列表。

【问题讨论】:

标签: angularjs checkbox angularjs-ng-model


【解决方案1】:

您可以简单地为每个名称使用相同的 ng-model。

这看起来像这样:

控制器

$scope.errorList = [{errorCode:1},{errorCode:2},
{errorCode:1},{errorCode:3},{errorCode:1},{errorCode:1},
{errorCode:2},{errorCode:1},{errorCode:3},{errorCode:3}];
$scope.checkboxByName = {};

查看

  <div ng-repeat="err in errorList">
    <input type="checkbox" ng-model="checkboxByName[err.errorCode]">
  </div>

如果你真的需要error.ignore var 在每个错误上,你可以添加这个函数:

 $scope.updateIgnore = function(){
  angular.forEach($scope.errorList, function(error){
   error.ignore = $scope.checkboxByName[error.errorCode];
  })
 }

对所有输入进行 ng-change:

ng-change="updateIgnore()"

这是一个plunker 展示了完整的实现

希望对您有所帮助。

【讨论】:

  • 感谢您的回复。我不确定我是否在关注你,我的意思是我实际上如何将复选框绑定到 err.errorCode 和 err.ignore? error.signal 是干什么用的?
  • @Shilan 对,signal 代表忽略,我只是把它命名错了。实际上,您只进行了一次绑定(到 checkboxByName[error.errorCode] )并在您更改其中一个值时更新所有 errors.ignore 。 (感谢 updateIgnore() 函数)。您应该检查 plunker 以获取实时示例。如果您还有其他问题,请随时提问。
  • 也许我没有正确解释我的问题,这里是我的问题的一个小问题:plnkr.co/edit/sLXGlXRh9vu7FETDmJd1?p=preview 我可以有很多错误列表,我需要用相同的错误代码更新其他复选框,当我单击其中一个时。再次感谢您的宝贵时间
  • 不幸的是,这就是我从我的 ajax 服务中获取它们的方式。我在想是否可以将它们绑定到 ng-model = "err.ignore[err.errorCode]" 之类的东西上,但是直到现在才起作用:(
  • @Shilan 我可以让它像这样工作:plnkr.co/edit/TpMiYlPhxJhzoqTyLZqC?p=preview 但它不会更新 err.ignore 我不确定这是你需要的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-18
  • 2018-12-19
  • 2018-10-21
  • 2013-02-14
  • 1970-01-01
  • 1970-01-01
  • 2018-04-22
相关资源
最近更新 更多