2017-03-17 45 views
-1
  1. 如何让我的buy(i)函数与我的第一段标记中重复出现的每个“汽车中的汽车”一起运行?如何通过数组中的每个值运行函数

  2. 如何让buy()函数只在点击一次时运行,以便如果点击两次,它不会再从总数中减去汽车的价格,而是返回(或添加)金额扣除总额。

var app = angular.module('myApp', []); 
 
app.controller('myCtrl', function($scope) { 
 
    $scope.total = 2000; 
 
    $scope.cars = [{ 
 
     model: "Ford Mustang", 
 
     color: "red", 
 
     price: 100 
 
    }, 
 
    { 
 
     model: "Fiat 500", 
 
     color: "white", 
 
     price: 199 
 
    }, 
 
    { 
 
     model: "Volvo XC90", 
 
     color: "black", 
 
     price: 190 
 
    } 
 
    ]; 
 

 
    $scope.buy = function(i) { 
 
    $scope.total -= $scope.cars[i].price; 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script> 
 
<div ng-app="myApp" ng-controller="myCtrl"> 
 
    <p ng-repeat="car in cars" ng-click="buy()">{{car.model}}</p> 
 
    <a href="#"> 
 
    <p ng-click="buy(0)">{{cars[0].model}}</p> 
 
    </a> 
 
    <p> Money Remaining: <br>{{total}}</p> 
 
</div>

+0

如果钱已经从值中减去,某个地方跟踪。也许$ scope.subtracted = true/false?然后在scope.buy()函数中检查这个,比如if($ scope.subtracted)' - 使用这个结果,将函数中的运算符更改为'+ ='或' - ='。 – Lewis

+0

'buy()'函数应该减去每辆车的价值,但同时也是一辆汽车点击汽车时的价值?逻辑不起作用 – Weedoze

回答

0

该指令ng-repeat可以跟踪当前迭代槽$index,你可以使用里面的ng-click指令在所需的车索引通路。 请注意ng-click需要一个表达式,因此您不需要使用括号来评估$index

只允许购买一种汽车,如果我理解正确,将要求您跟踪已经销售的产品。在$scope.history我们可以保留已经销售的索引集合。

我想你想是这样的:

<div ng-app="myApp" ng-controller="myCtrl"> 
    <p ng-repeat="car in cars"> 
    {{car.model}} 
    <br> 
    <a ng-href="#" ng-click="buy($index)">Buy</a> 
    </p> 
    <p> Money Remaining: <br>{{total}}</p> 
</div> 
<script> 
    var app = angular.module('myApp', []); 

    app.controller('myCtrl', function($scope) { 
    $scope.total = 2000; 
    //keep trak of what was bought already 
    $scope.history = []; 
    $scope.cars = [ 
     {model : "Ford Mustang", color : "red", price: 100}, 
     {model : "Fiat 500", color : "white", price: 199}, 
     {model : "Volvo XC90", color : "black", price: 190} 
    ]; 

    $scope.buy= function (i) { 
     var p; 
     //if bought, cancel it 
     if((p = $scope.history.indexOf(i)) !== -1){ 
     $scope.history.splice(p, 1); 
     $scope.total += $scope.cars[i].price ; 
     }else{ 
     //else add it to history 
     $scope.history.push(i); 
     $scope.total -= $scope.cars[i].price ; 
     } 
    } 
    }); 
</script> 
+0

非常感谢。那么我怎么才能得到这样的功能,即一旦再次点击,就可以将从总价中扣除的价格加回到总价中。 –

+0

我编辑了答案,以反映你最后的愿望:) – bluehipy

+0

这是完美的。正是我想要的。我不明白如何使用indexOf。我不知道它是如何工作的 –

1

设置属性,以你的车知道它是否已被或不买。

购买时我将属性isBought设置为true。这也将隐藏购买按钮与ng-if

var app = angular.module('myApp', []); 
 
app.controller('myCtrl', function($scope) { 
 
    $scope.total = 2000; 
 
    $scope.cars = [{ 
 
     model: "Ford Mustang", 
 
     color: "red", 
 
     price: 100 
 
    }, 
 
    { 
 
     model: "Fiat 500", 
 
     color: "white", 
 
     price: 199 
 
    }, 
 
    { 
 
     model: "Volvo XC90", 
 
     color: "black", 
 
     price: 190 
 
    } 
 
    ]; 
 

 
    $scope.buy = function(car) { 
 
    car.isBought = true; 
 
    $scope.total -= car.price; 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="myApp" ng-controller="myCtrl"> 
 
    <div ng-repeat="car in cars"> 
 
    <p>{{car.color}} {{car.model}} - {{car.price}}$</p> 
 
    <button ng-if="!car.isBought" ng-click="buy(car)">Buy</button> 
 
    </div> 
 
    <i> Money Remaining: <b>{{total}}$</b></i> 
 
    <h5>Cars bought</h5> 
 
    <div ng-repeat="car in cars"> 
 
    <p ng-if="car.isBought">{{car.color}} {{car.model}} - {{car.price}}$</p> 
 
    </div> 
 
</div>

+0

非常感谢。那么我怎么才能得到这样的功能,即一旦再次点击,就可以将从总价中扣除的价格加回到总价中。 –

相关问题