javascript - AngularJS 复选框和 ng-change 的工作方式非常奇怪

标签 javascript angularjs

我有一个包含以下项目的数组:

{ 
   key : 'abc',
   color: 'Red',
   show: true
}

<div ng-repeat="x in myArray">
    <input type="checkbox" ng-model="x" ng-change="changeShow($index)" checked="checked" />
    <div style="background-color:{{x.color}}; width: 5px;" class="left">&nbsp;</div>
    <label>{{x.key}}</label>
    {{x}}
</div>

$scope.changeShow = function (index) {
    $scope.myArray[index].show = !$scope.myArray[index].show;
}

问题是,当我单击任何 chekcbox 时,{{x}} 仅呈现 true/false,而 颜色名称消失。为什么??

最佳答案

  1. 将复选框绑定(bind)到 x.show 而不是 x

  2. 您可以删除 ng-change="changeShow" 位,因为 Angular 将更新显示属性

请参阅下面的演示

var app = angular.module('app', []);

angular.module('app').controller('homeCtrl', homeCtrl);

homeCtrl.inject = ['$scope']

function homeCtrl($scope) {

  $scope.myArray = [{
    key: 'abc',
    color: 'Red',
    show: true
  }]


};
<!DOCTYPE html>
<html ng-app="app">

<head>
  <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.2/angular.min.js"></script>
  <meta charset="utf-8">
  <title>JS Bin</title>
</head>

<body ng-controller="homeCtrl">
  <div ng-repeat="x in myArray">
    <input type="checkbox" ng-model="x.show" checked="checked" />
    <div style="background-color:{{x.color}}; width: 5px;" class="left">&nbsp;</div>
    <label>{{x.key}}</label>
    {{x}}
  </div>
</body>

</html>

关于javascript - AngularJS 复选框和 ng-change 的工作方式非常奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29699668/

相关文章:

javascript - 使用 Angular Material 和 $mdThemingProvider 更改调色板颜色

angularjs - 在 UI-Grid 标题中实现多列分组的任何更好的方法?

javascript - Protractor :获取警报文本?

javascript - 将 socket.on 包装为 promise

javascript - 我想从多个文本输入中获取输入并将它们发送到我的数据库,但只有最后一个输入发送

javascript - SCORM:单击演示文稿中的按钮时在 SCO 之间跳转

javascript - jQuery 和 CORS 在开放的远程服务器上总是失败

javascript - Typescript - 如何处理两个接口(interface)之间的公共(public)属性?

javascript - 复制当前网址按钮 - Javascript

javascript - 在 React Native 的 TabNavigator 中再次按下时滚动到当前选项卡的顶部