AngularJS - 限制增量和减量

时间:2016-06-29 12:49:55

标签: javascript angularjs angularjs-scope

我有两个按钮,一个用于递增,另一个用于递减我的范围。

我想:闵。 number = 0和Max。数= 50。

我试过这个:

myApp.controller('StepCtrl', function($scope, $timeout, $state, $stateParams) {


    $scope.event = {
      priceid: 0,
    }

   if ($scope.event.priceid === 0) {

    console.log("This is 0")

    $scope.nextPrice = function() {
      $scope.event.priceid += 5;
    }

    $scope.previousPrice = function() {
      $scope.event.priceid = 0;
    }     

    } else if ($scope.event.priceid === 50) {

    console.log("This is 50")

    $scope.nextPrice = function() {
      $scope.event.priceid = 50;
    }

    $scope.previousPrice = function() {
      $scope.event.priceid -= 5;
    }

    } else {

    console.log("This is into 0 and 50")

    $scope.nextPrice = function() {
      $scope.event.priceid += 5;
    }

    $scope.previousPrice = function() {
      $scope.event.priceid -= 5;
    }

    }

})

但是,我可以拥有像-40或95这样的价值,我认为我的"如果"和" Else"被忽略了。

有你的想法吗?

感谢您的回复。 :)

2 个答案:

答案 0 :(得分:1)

我必须看到你的完整控制器才能全面了解情况。但我相信问题是你的表达式在启动时而不是实时评估一次。

我的解决方案是用这个替换你的if-else语句。

$scope.event = {
  priceid: 0,
}

$scope.nextPrice = function() {
  if($scope.event.priceid < 50)
    $scope.event.priceid += 5;
}

$scope.previousPrice = function() {
  if($scope.event.priceid > 0)
    $scope.event.priceid -= 5;
}

这样,每次调用$ scope.previousPrice()或$ scope.nextPrice()而不是那些刚刚在运行时分配的方法时,都会评估您的条件。

答案 1 :(得分:0)

我建议您探索此解决方案:

var event = {
  priceid: 0,
  priceIterator: 45,
  nextPrice: function() {
    if ((this.priceid + this.priceIterator) <= 50) {
      this.priceid += this.priceIterator;
    }
  },
  previousPrice: function() {
    if ((this.priceid - this.priceIterator) > 0) {
      this.priceid -= this.priceIterator;
    }
  }
};

event.nextPrice(); // 45
event.nextPrice(); // still 45
event.previousPrice(); //0
event.previousPrice(); //still 0
alert(event.priceid);

此解决方案使用对象和上下文(this)来处理价格。同时避免在条件内制作具有相同名称的多个函数,这是非常糟糕的做法。

为了让它适用于你的角度应用程序,只需要改变,而不是变量,使用范围:

$scope.event = {
  priceid: 0,
  priceIterator: 45,
  nextPrice: function() {
    if ((this.priceid + this.priceIterator) <= 50) {
      this.priceid += this.priceIterator;
    }
  },
  previousPrice: function() {
    if ((this.priceid - this.priceIterator) > 0) {
      this.priceid -= this.priceIterator;
    }
  }
};
$scope.event.nextPrice();
$scope.event.previousPrice();
$scope.event.previousPrice();
alert($scope.event.priceid);