根据整数自动将复选框设置为true

时间:2017-02-07 07:53:28

标签: angularjs checkbox

您好我需要将保留页面复选框中发送的整数值转换或使用到查看/打印交易页面。

请查看我的旧问题: How to add IDs of a checkbox in angular js

我能够从数据库中获取值并在视图页面上显示唯一的问题是复选框为空。预订页面上有5个复选框(笔记本电脑,耳机,投影仪,平板电脑,扬声器),因此可能的组合为32,这就是为什么我曾经将0到31之间的整数发送到数据库的原因,因为那里有保留项目只有一列。

我已成功管理(在此社区的帮助下)从数据库发布和获取值。

现在请帮助我转换/使用该INT值,如果用户在保留页面上检查了该值,则自动将复选框值设置为true。

示例:

笔记本电脑= 1;耳机= 2;投影仪= 4;平板电脑= 8;发言者= 16

用户检查(保留页面)

✓笔记本电脑,耳机,✓投影仪,平板电脑,✓演讲者

DB上的值:21

查看/打印页面之一

我需要使用DB上的int值(即21)自动选中复选框✓笔记本电脑,耳机,✓投影仪,平板电脑,✓只读禁用模式的扬声器。

到目前为止,这是我在html和控制器中的代码:



function getReservedRequestsById(reservedRequestId) {

            var key = reservedRequestId;

            return dataservice.getReservedRequests(key).then(function (data) {
                vm.ReservedRequestId = data.data;
                console.log(vm.ReservedRequestId);
                logger.info('ACTIVATED');


                //CheckBox
                if (vm.ReservedRequestId.Items > 15) {
                    $scope.chkItems.forEach(function (Item) {
                    if (Item.id == 16) {
                        Item.value = true;
                    }
                })   
               }

                else if ((16 > vm.ReservedRequestId.Items > 7) || (32 > vm.ReservedRequestId.Items > 23)) {
                    $scope.chkItems.forEach(function (Item) {
                    if (Item.id == 8) {
                        Item.value = true;
                    }
                })   
    	       }

		else if ((8 > vm.ReservedRequestId.Items > 3) || (16 > vm.ReservedRequestId.Items > 11) || (24 > vm.ReservedRequestId.Items > 19) || (32 > vm.ReservedRequestId.Items > 27)) {
                    $scope.chkItems.forEach(function (Item) {
                    if (Item.id == 4) {
                        Item.value = true;
                    }
                })   
    	       }

    // AND also for 1 & 2 i did not put it here because i would like to just test if it is working  on the three check boxes. If it is working i'll just add the other two
              
}

<md-input-container class="md-block" flex-gt-sm>
<label class="force-input-label">Items</label>
</br>
<div ng-repeat="chkItem in chkItems">
<md-checkbox name="chkItem.name" ng-model="chkItem.value" readonly>{{chkItem.name}}
</div>
</md-input-container>
&#13;
&#13;
&#13;

目前无法使用

需要帮助和建议

英语和angularjs / web开发都不好:)

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我修复了你的代码。我只保留你提供的逻辑。问题是16 > x > 7在javascript中不是正确的语法。您必须使用&&

&#13;
&#13;
//Laptop = 1; Headset = 2; Projector = 4; Tablet = 8; Speakers = 16
var chkItems = [{
  id: 1,
  name: 'Laptop',
  value: null,
}, {
  id: 2,
  name: 'Headset',
  value: null
}, {
  id: 4,
  name: 'Projector',
  value: null
}, {
  id: 8,
  name: 'Tablet',
  value: null
}, {
  id: 16,
  name: 'Speakers',
  value: null
}];

var items = 21;

if (items >= 16) {
  selectItem(16);
}

if ((items < 16 && items > 7) || (items < 32 && items > 23)) {
  selectItem(8);
}

if ((items < 8 && items > 3) || (items < 16 && items > 11) || (items < 24 && items > 19) || (items < 32 && items > 27)) {
  selectItem(4);
}

console.log(chkItems);

function selectItem(id) {
  chkItems.map(function(elem) {
    if (!elem.value)
      elem.value = (elem.id === id);
    return elem;
  });
}
&#13;
&#13;
&#13;