【问题标题】:How to reduce if conditions in angularjs?如何减少angularjs中的条件?
【发布时间】:2016-03-30 17:21:37
【问题描述】:

我有 8 个这样的图标

每个图标都有不同的功能。也可以点击多个图标,调用不同的功能。

这只是一个例子,但我必须做其他事情。我需要知道如何为此功能提供适当的 if 条件

现在我正在做以下方式

html 代码前 2 个图标

<input value="1" type="checkbox" name="function[]" id="checkbox_vs1" ng-model="selection[1]"  ng-change="onFChange()"/>

在控制器中

$scope.onFChange = function()
{
     if(this.selection[1] == true && this.selection[2] == false && this.selection[3] == false && this.selection[4] == false && this.selection[5] == false && this.selection[6] == false && this.selection[7] == false && this.selection[6] == false)
             {
                 //call function
             }
}

像这样我必须检查所有组合是否有任何简单的方法可以实现这一点

这里是笨蛋 https://plnkr.co/edit/HNqc2GaQFgoMwhO5S9Ot链接

所以这将有 40320 if 条件。我需要减少这个

谢谢

【问题讨论】:

  • 其实我不想返回1&2组合
  • 我只想知道如何简化 if 条件
  • 如果我理解正确的话。您将有很多这样的 if 语句,而您正试图减少这种情况? 切换?或 while/do ?
  • @dr Jones 我已经添加了你可以查看链接的插件

标签: php html angularjs


【解决方案1】:

您可以为此创建通用函数,例如为此

     if(this.selection[1] && !this.selection[2] && !this.selection[3] &&  !this.selection[4] && !this.selection[5] && !this.selection[6] &&   !this.selection[7] && !this.selection[6])
     {
     //call function
     }
     //Code for above function 


     function checkCondition(index,this.selection)
     {
        if(!this.selection[index])
         {
            return false;
         }
      for(var i=1;i<this.selection.length;i++)
       {
         if(this.selection[i]&&i!=index)
          {
                return false;

           }

       }
            return true;

     }

请注意,这是一个粗略的想法,可以帮助您制定方法

【讨论】:

  • 但是对于每个条件我必须调用不同的函数
  • 实际上这会缩短您在我的方法中的代码,您只需编写一次此条件,而不是您当前方法中的多次
  • 如果我选择了多个我该如何实现这个
  • 您必须在手风琴中创建 3 个不同的功能才能参加聚会,同时检查两个项目,同时检查三个项目,但这肯定会减少您编写条件的代码
  • 实际上没有任何内置函数或angular js / javascript属性可以实现这一点,您必须通过循环和函数编写此代码
【解决方案2】:

创建一个循环选择的函数,以检查任何其他值是否为真。示例:

HTML:

<input value="1" type="checkbox" name="function[]" id="checkbox_vs1" ng-model="selection[1]"  ng-change="onFChange(1)"/>

控制器:

$scope.onFChange = function(checkedBoxNumber)
{
     if(checkSelection(checkedBoxNumber))
     {
         // Do stuff
     }
}

function checkSelection(checkedBoxNumber) {
    for (var i = 0; i < selection.length; i++) {
        // Check values
        // Return false if other values are true
    }
    return true;
}

【讨论】:

  • 多个复选框我也可以选择。每个组合我都必须调用不同的函数
  • 你能提供一个 Plunker 或类似的代码示例吗?
  • 我已经添加了plunker,你可以查看链接
  • 太棒了。检查这些时,您实际上在做什么?我可以提供代码来简化您的警报示例,但它可能对您的实际情况没有帮助。
  • 每个组合我必须调用不同的函数
【解决方案3】:

这是你的意思吗?

$scope.onFChange = function()
{
     if(this.selection[1] && !this.selection[2] && !this.selection[3] && !this.selection[4] && !this.selection[5] && !this.selection[6] && !this.selection[7] && !this.selection[6])
     {
         //call function
     }
}

这是使用truthy的。

编辑

$scope.onFChange = function()
{
     var s1 = selection[1];
     var s2 = selection[2];
     var s3 = selection[3];
     var s4 = selection[4];
     var s5 = selection[5];
     var s6 = selection[6];
     var s7 = selection[7];
     var s8 = selection[8];

     // Condition 1
     if(s1 && !s2 && !s3 && !s4 && !s5 && !s6 && !s7 && !s8)
     {
         //call function
     }
}

这样会更容易写出你的条件。

【讨论】:

  • 这不会让他仍然使用 8 个 if 语句吗?因为对于每个 selection = true 他可能有一个 if
  • 根据您的组合,您必须编写 IF 语句。您可以进一步简化代码,但如果您要检查多个条件,我看不到解决方法。
猜你喜欢
  • 2016-02-28
  • 1970-01-01
  • 2015-01-29
  • 2018-08-28
  • 1970-01-01
  • 1970-01-01
  • 2021-03-08
  • 2012-05-13
  • 1970-01-01
相关资源
最近更新 更多