【问题标题】:Increment number in ANGULAR doesn't workANGULAR 中的增量数不起作用
【发布时间】:2016-01-30 18:23:56
【问题描述】:

我正在做一个应用程序,当您单击input 时会显示一个虚拟键盘。减量应该是减量 ng-model food.Pezzi,它工作正常。但是增量不起作用:它添加了一个“1”。为什么? PLUNKER CODE

(奇怪的是你在按增量之前按减量,增量有效....)

标记

<td>
    <a data-role="button" data-theme="e" ng-click="food.Pezzi = food.Pezzi-1; " 
      style="background-color: rgba(246, 246, 246, 0.2); border-color: rgba(0, 0, 0, 0.27); text-shadow: 0px 1px 0px #F3F3F3;color: #333;">
         Decrement
  </a>
</td>
<td>
    <a data-role="button" data-theme="b" class="zero" ng-click='food.Pezzi=food.Pezzi.toString()+"0"'>
        0
    </a>
</td>
<td>
    <a data-role="button" data-theme="e" class="pos" ng-click='food.Pezzi = food.Pezzi + 1' 
      style="background-color: rgba(246, 246, 246, 0.2); border-color: rgba(0, 0, 0, 0.27); text-shadow: 0px 1px 0px #F3F3F3;color: #333;">
        Increment
      </a>
</td>

谢谢你的建议

【问题讨论】:

    标签: javascript angularjs html increment angularjs-ng-click


    【解决方案1】:

    将您的代码更改为 var itemToClone = { "Selection": "", "Pezzi": 0 }; 而不是 var itemToClone = { "Selection": "", "Pezzi": "" };。您正在使用空字符串进行初始化,以将其附加到字符串而不是添加数字。

    其他地方也一样。修改输入后,您必须使用 parseInt 键入转换字符串。

    更新

    这很奇怪。让我们在控制器中添加一个方法,如下所示:

    $scope.inc = function(food) {
        food.Pezzi = food.Pezzi || "0"
        food.Pezzi = parseInt(food.Pezzi.toString()) + 1;
    };
    

    现在,将增量按钮的 ng-click 修改为:ng-click="inc(food)"

    【讨论】:

    • 我试过了,但是不行,它清除所有并写“1”! plnkr.co/edit/XbLYCLtwjAlUEpdkk2Pg?p=preview
    • 我已经更新了答案。请检查一下。您可以对减量按钮执行相同操作。
    • 另外,如果您的 plunkr 不起作用,请告诉我。我将分享我的编辑。
    • 它工作得很好,谢谢你的战利品! p.s.什么食物.Pezzi || “0”是什么意思?
    • 很高兴,这行得通。随意接受答案。 food.Pezzi || "0" 表示如果food.Pezzi 中有undefinednull0 值,那么它将使用"0"(处理边缘条件)对其进行初始化。
    【解决方案2】:

    首先,你以一种糟糕的方式使用 AngularJS,永远不要将业务逻辑放在你的视图中。

    顺便说一句,您的错误取决于属性 Pezzi类型,对于数学运算,您需要使用数字,但是在 javascript 中,+ 运算符甚至用于字符串连接...看看以下两个示例:(第一个是正确的,第二个,因为丢失类型,另外执行字符串连接而不是求和) .

    angular
      .module('test', [])
      .controller('TestCtrl', function($scope) {
        var vm = $scope;
      
        vm.food = { pezzi: 0 };
        
        vm.increment = function() { vm.food.pezzi += 1; };
        vm.decrement = function() { if(vm.food.pezzi > 0) vm.food.pezzi -= 1;   };
        vm.reset = function() { vm.food.pezzi = 0; };
    
        vm.getType = function() {
          return typeof vm.food.pezzi;
        }
        
          
        vm.foodCloned = { pezzi: 0 + '' };
        
        vm.incrementCloned = function() { vm.foodCloned.pezzi += 1 + ''; };
        vm.decrementCloned = function() { vm.foodCloned.pezzi -= 1 + ''; };
        vm.resetCloned = function() { vm.foodCloned.pezzi = 0 + ''; };
    
        vm.getClonedType = function() {
          return typeof vm.foodCloned.pezzi;
        }
        
      })
    ;
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
    <article ng-app="test">
      <div ng-controller="TestCtrl">
        
        <button ng-click="decrement($event)">Decrement</button>
        <button ng-click="increment($event)">Increment</button>
        <button ng-click="reset($event)">Reset</button>
        
        
        <h1 ng-bind="food | json"></h1>
        <div ng-bind="getType()"></div>
        <hr><hr>
        
        
        <button ng-click="decrementCloned($event)">Decrement</button>
        <button ng-click="incrementCloned($event)">Increment</button>
        <button ng-click="resetCloned($event)">Reset</button>
        
        
        <h1 ng-bind="foodCloned | json"></h1>
        <div ng-bind="getClonedType()"></div>
      </div>
    </article>

    【讨论】:

    • 这真是一段漂亮的代码。也很干净整洁!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-08
    相关资源
    最近更新 更多