Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用角度键制作加减切换_Javascript_Jquery_Angularjs - Fatal编程技术网

Javascript 如何使用角度键制作加减切换

Javascript 如何使用角度键制作加减切换,javascript,jquery,angularjs,Javascript,Jquery,Angularjs,我正试着做一个带角度的加减切换。作为一项基本功能,它将允许用户在切换的任一侧输入两个数字作为输入,然后根据选择的切换,将数字相加或相减。 我试图把它放在一个指令中,这样你们就可以多次调用它(所以若你们想对多个数字进行加法、减法或二者的组合,你们可以)。我已经让它切换显示的内容,但我不知道如何让它做正确的数学运算 <div id="tab-module-row-1"> </div> <div class="module-row mo

我正试着做一个带角度的加减切换。作为一项基本功能,它将允许用户在切换的任一侧输入两个数字作为输入,然后根据选择的切换,将数字相加或相减。 我试图把它放在一个指令中,这样你们就可以多次调用它(所以若你们想对多个数字进行加法、减法或二者的组合,你们可以)。我已经让它切换显示的内容,但我不知道如何让它做正确的数学运算

        <div id="tab-module-row-1">
        </div>

 <div class="module-row module-tab pull-right" id="modtab-sql_dss">
     <img src="images/icons/icon-orangebox-plus.png" class="modtab-toggle">
 </div>

<div id="tab-module-row-2">
</div>
以下是我到目前为止的情况:
在plunker上:
html:

<input type="number" size="2" ng-model="values.firstValue" ng-pattern="onlyNumbers" required>
<plus-minus-toggle></plus-minus-toggle>
<input type="number" size="2" ng-model="values.secondValue" ng-pattern="onlyNumbers">
<plus-minus-toggle></plus-minus-toggle> 
<input type="number" size="2" ng-model="values.thirdValue" ng-pattern="onlyNumbers">
<button ng-click="doMath()">Calculate</button>
{{result}}
        <div id="tab-module-row-1">
        </div>

 <div class="module-row module-tab pull-right" id="modtab-sql_dss">
     <img src="images/icons/icon-orangebox-plus.png" class="modtab-toggle">
 </div>

<div id="tab-module-row-2">
</div>

看看这是否适用于您:

$('div[id^="modtab-"]').click(function(){
        <div id="tab-module-row-1">
        </div>

 <div class="module-row module-tab pull-right" id="modtab-sql_dss">
     <img src="images/icons/icon-orangebox-plus.png" class="modtab-toggle">
 </div>

<div id="tab-module-row-2">
</div>
$(this).find('.modtab toggle').attr(“src”),function(i,attr){ var o=this.src.indexOf('plus')>-1?this.src.replace('plus','minus'):this.src.replace('minus','plus'); 返回o; }); });

        <div id="tab-module-row-1">
        </div>

 <div class="module-row module-tab pull-right" id="modtab-sql_dss">
     <img src="images/icons/icon-orangebox-plus.png" class="modtab-toggle">
 </div>

<div id="tab-module-row-2">
</div>

我只是对布局有一些建议:

        <div id="tab-module-row-1">
        </div>

 <div class="module-row module-tab pull-right" id="modtab-sql_dss">
     <img src="images/icons/icon-orangebox-plus.png" class="modtab-toggle">
 </div>

<div id="tab-module-row-2">
</div>
老实说,这个有棱角的东西看起来让我很不安,我不知道在哪里实现新功能

        <div id="tab-module-row-1">
        </div>

 <div class="module-row module-tab pull-right" id="modtab-sql_dss">
     <img src="images/icons/icon-orangebox-plus.png" class="modtab-toggle">
 </div>

<div id="tab-module-row-2">
</div>
但我可以给你一些一般性的建议:

        <div id="tab-module-row-1">
        </div>

 <div class="module-row module-tab pull-right" id="modtab-sql_dss">
     <img src="images/icons/icon-orangebox-plus.png" class="modtab-toggle">
 </div>

<div id="tab-module-row-2">
</div>
我会做一个函数

        <div id="tab-module-row-1">
        </div>

 <div class="module-row module-tab pull-right" id="modtab-sql_dss">
     <img src="images/icons/icon-orangebox-plus.png" class="modtab-toggle">
 </div>

<div id="tab-module-row-2">
</div>
function math(op,num1,num2) {
    switch (op) {
        case 'add': return num1+num2;
        case 'sub': return num1-num2;
        case 'mul': return num1*num2;
        case 'dev': return num1/num2;
        //etc
    }
}
  • 然后必须存储两个字段的子结果,并将该值与下一个字段的值一起使用
  • 单击“计算”按钮调用一个函数,在该函数中使用for循环遍历每个输入字段,并调用上述函数。
    • 从输入字段获取数字,从操作按钮获取操作

用于切换操作按钮上的操作:

        <div id="tab-module-row-1">
        </div>

 <div class="module-row module-tab pull-right" id="modtab-sql_dss">
     <img src="images/icons/icon-orangebox-plus.png" class="modtab-toggle">
 </div>

<div id="tab-module-row-2">
</div>
  • 将所有操作放在一个数组中<代码>op=['+'、'-'、'×'、'÷'等]
  • 然后在从“计算”按钮调用的函数中,检查这些字符串以确定必须在两个数字之间执行哪个操作

以下是一个关于plunker的示例,它隔离了指令的范围,并提供了与父控制器的双向绑定:

        <div id="tab-module-row-1">
        </div>

 <div class="module-row module-tab pull-right" id="modtab-sql_dss">
     <img src="images/icons/icon-orangebox-plus.png" class="modtab-toggle">
 </div>

<div id="tab-module-row-2">
</div>
基本思想是通过隔离指令的范围使其“可重用”:

        <div id="tab-module-row-1">
        </div>

 <div class="module-row module-tab pull-right" id="modtab-sql_dss">
     <img src="images/icons/icon-orangebox-plus.png" class="modtab-toggle">
 </div>

<div id="tab-module-row-2">
</div>
app.directive('plusMinusToggle',function(){
功能加操作(a、b){
返回a+b;
}
功能操作(a、b){
返回a-b;
}
返回{
限制:'E',
范围:{
操作:'='
},
模板:“+-”,
控制器:功能($scope){
$scope.isPlus=true;
$scope.operation=plusOperation;
$scope.$watch('isPlus',函数(isPlus){
如果(isPlus){
$scope.operation=plusOperation;
}否则{
$scope.operation=minusOperation;
}
});
},
替换:正确
};  
});
因此,在控制器中,有两个变量可用于双向绑定:

        <div id="tab-module-row-1">
        </div>

 <div class="module-row module-tab pull-right" id="modtab-sql_dss">
     <img src="images/icons/icon-orangebox-plus.png" class="modtab-toggle">
 </div>

<div id="tab-module-row-2">
</div>
app.controller('MainCtrl',函数($scope、$rootScope、$log){
$scope.op1=angular.noop;
$scope.op2=angular.noop;
})
在您看来,这是实现双向绑定的地方:

        <div id="tab-module-row-1">
        </div>

 <div class="module-row module-tab pull-right" id="modtab-sql_dss">
     <img src="images/icons/icon-orangebox-plus.png" class="modtab-toggle">
 </div>

<div id="tab-module-row-2">
</div>

回到
MainCtrl
中,您可以使用那些将根据指令的隔离范围进行更改的操作:

        <div id="tab-module-row-1">
        </div>

 <div class="module-row module-tab pull-right" id="modtab-sql_dss">
     <img src="images/icons/icon-orangebox-plus.png" class="modtab-toggle">
 </div>

<div id="tab-module-row-2">
</div>
$scope.doMath = function() {
  $scope.result = $scope.op2($scope.op1($scope.values.firstValue, $scope.values.secondValue), $scope.values.thirdValue);
};

您可以在“角度指南”部分中了解更多信息。

您可以使指令同时包含输入和按钮。这样,您就可以将一个操作附加到一个数字。将$scope.values设置为具有值和操作的对象数组(第一个对象没有操作)

        <div id="tab-module-row-1">
        </div>

 <div class="module-row module-tab pull-right" id="modtab-sql_dss">
     <img src="images/icons/icon-orangebox-plus.png" class="modtab-toggle">
 </div>

<div id="tab-module-row-2">
</div>
现在您可以重复ng以显示输入和按钮。这使得添加更多输入/按钮变得容易

        <div id="tab-module-row-1">
        </div>

 <div class="module-row module-tab pull-right" id="modtab-sql_dss">
     <img src="images/icons/icon-orangebox-plus.png" class="modtab-toggle">
 </div>

<div id="tab-module-row-2">
</div>
<span ng-repeat="v in values">
  <plus-minus-toggle value="v"></plus-minus-toggle>  
</span>

以下是指令:

angular.module('diceAngularApp')
.directive('plusMinusToggle', function() {  
  return {
    restrict: 'E',      
    scope:true,
    template: '<button ng-click="custom=!custom"><span ng-show="custom">+</span><span ng-hide="custom">-</span></button>',
    replace: true
  };  
});
        <div id="tab-module-row-1">
        </div>

 <div class="module-row module-tab pull-right" id="modtab-sql_dss">
     <img src="images/icons/icon-orangebox-plus.png" class="modtab-toggle">
 </div>

<div id="tab-module-row-2">
</div>
app.directive('plusMinusToggle', function() {  
  return {
    restrict: 'E',      
    scope:{
      value: '='
    },
    template: '<span><button ng-show="showButton(value.op)" ng-click="buttonClick()"><span ng-bind="value.op"></span></button><input type="number" size="2" ng-pattern="onlyNumbers" ng-model="value.value"/></span>',
    replace: true,
    link: function($scope, elem, attr){
      $scope.onlyNumbers  = /^\d+$/;
      $scope.showButton = function(op){
        return op != undefined;
      }
      $scope.buttonClick = function(){
        if($scope.value.op == '+')
          $scope.value.op = '-';
        else
          $scope.value.op = '+';
      }
    }
  };  
});
app.directive('plusMinusToggle',function(){
返回{
限制:'E',
范围:{
值:'='
},
模板:“”,
替换:正确,
链接:函数($scope、elem、attr){
$scope.onlyNumbers=/^\d+$/;
$scope.showButton=功能(op){
返回op!=未定义;
}
$scope.buttonClick=function(){
如果($scope.value.op=='+'))
$scope.value.op='-';
其他的
$scope.value.op='+';
}
}
};  
});
此方法还可以使添加乘法或除法选项变得相当简单(单击按钮可以循环选择选项)

        <div id="tab-module-row-1">
        </div>

 <div class="module-row module-tab pull-right" id="modtab-sql_dss">
     <img src="images/icons/icon-orangebox-plus.png" class="modtab-toggle">
 </div>

<div id="tab-module-row-2">
</div>

这里有一个。

主要推荐使用最新版本的angularjs:

        <div id="tab-module-row-1">
        </div>

 <div class="module-row module-tab pull-right" id="modtab-sql_dss">
     <img src="images/icons/icon-orangebox-plus.png" class="modtab-toggle">
 </div>

<div id="tab-module-row-2">
</div>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js"></script>
并放置观察者字段,如果其中一个字段发生更改,则函数将执行:

        <div id="tab-module-row-1">
        </div>

 <div class="module-row module-tab pull-right" id="modtab-sql_dss">
     <img src="images/icons/icon-orangebox-plus.png" class="modtab-toggle">
 </div>

<div id="tab-module-row-2">
</div>
$scope.$watch('cases', function () {
  var result = "";
  for(var i = 0; i < $scope.cases.length; i++) {
    result += $scope.cases[i].value + $scope.cases[i].custom
  }
  $scope.result = $window.eval(result);
}, true)
$scope.$watch('cases',function(){
var结果=”;
对于(变量i=0;i<$scope.cases.length;i++){
结果+=$scope.cases[i]。值+$scope.cases[i]。自定义
}
$scope.result=$window.eval(结果);
},对)
第三个论点说,我们跟随对象,把“真”放在后面

        <div id="tab-module-row-1">
        </div>

 <div class="module-row module-tab pull-right" id="modtab-sql_dss">
     <img src="images/icons/icon-orangebox-plus.png" class="modtab-toggle">
 </div>

<div id="tab-module-row-2">
</div>

这里的实现

如果我读对了这篇文章,它所做的就是在单击图像时用加号替换图像,用减号替换图像,反之亦然。据我所知,没有任何东西会改变我控制器中的数学函数,这正是我所寻找的。如果我错了,请纠正我,因为我对angularjs和jquery非常陌生。不,你是对的-抱歉,我想这可能对你有用。哇,太棒了。非常感谢你。我必须说我确实读过,但当涉及到角度时,我仍然对一般的范围感到困惑。我会再看一次,看看是否有更多的人能理解,因为我已经看到了你的精彩例子。谢谢。@firexion和也是优秀的资源。我非常喜欢这个版本。我可以更好地理解正在发生的事情,而不是使用potatosalad提供的版本。我觉得他提供的方式“技术上”可能是更好的方式,但我可以更容易地理解和操作它。这很有道理
        <div id="tab-module-row-1">
        </div>

 <div class="module-row module-tab pull-right" id="modtab-sql_dss">
     <img src="images/icons/icon-orangebox-plus.png" class="modtab-toggle">
 </div>

<div id="tab-module-row-2">
</div>