如何将 ng-repeat 中的对象添加到控制器数组($scope)中?
How to add objects from ng-repeat into a controller array ($scope)?
我有一个数组是:
$scope.products=[
{name:'Orange', price:'1.15'},
{name:'Apple', price:'1.08'},
{name:'Pear', price:'1.85'},
{name:'Mango', price:'2.10'},
{name:'Blueberry', price:'0.55'},
{name:'Strawberry', price:'1.40'}
];
并且我在每个数组中都添加了一个按钮,因为我正在创建一个购物车。我创建了一个空数组,它是所选产品的购物车,但是当我尝试将这些对象添加到我的新数组时,它不起作用。代码如下:
<li ng-repeat="x in products | orderBy:'name'">
{{x.name + " : " + '$' + x.price}}
<button type="button" class="btn btn-dark" ng-click="addItem(x)">
Add product
</button>
</li>
控制器是:
$scope.cart=[];
$scope.addItem = function(x){
$scope.cart.push($scope.x);
console.log($scope.cart);
};
您将对象作为 x
传递给 ng-click
中的函数,但它不是 $scope.x
所以只需更改:
$scope.cart.push($scope.x);
到
$scope.cart.push(x);
有效的是:
<div ng-app="myApp" ng-controller="ctrl" class="container">
<h3>Lets use controllers with methods!</h3>
<p>Input first number: <input type="text" ng-model="first" class="form-control"></p>
<p>Input second number: <input type="text" ng-model="second" class="form-control"></p>
<br>
<p>Sum: {{sum()}}</p>
<p>Sum: {{mup()}}</p>
<hr>
<h3>Shopping Cart example!</h3> <br>
<div class="container-fluid">
<div style="height: 400px; width: 200px;" class="overflow-auto">
<ul>
<br>
<li ng-repeat="x in products">
{{x.name + " : " + '$' + x.price}}
<br>
<button type="button" class="btn btn-dark" ng-click="addItem($index)">Add product</button><br><br>
</li>
</ul>
</div>
<div style="height: 400px; width: 200px; margin-left: 20px" class="overflow-auto">
<ul>
<br>
<li ng-repeat="x in cart track by $index">
{{x.name + " : " + '$' + x.price}}
<button type="button" class="btn btn-dark" ng-click="removeItem($index)">Remove</button><br><br>
</li>
</ul>
</div>
<div style="margin-left: 50%; position: absolute;" class="container-sm">
<ul>
<br><br>
<p>Check out!</p>
<p style="color: red">Total paycheck: {{checkOut() | currency}}</p>
</ul>
</div>
</div>
</div>
<script>
var app = angular.module("myApp",[]);
app.controller("ctrl",function($scope){
$scope.sum = function() {
if(isNaN($scope.first) && isNaN($scope.second)){
return "Please enter a number";
}else{
return Number($scope.first) + Number($scope.second);
}
};
$scope.mup = function() {
if(isNaN($scope.first) || isNaN($scope.second)){
return "Please enter a number";
}else{
return $scope.first * $scope.second;
}
};
//Shopping cart $scope
$scope.products=[
{name:'Orange', price:1.15},
{name:'Apple', price:1.08},
{name:'Pear', price:1.85},
{name:'Mango', price:2.10},
{name:'Blueberry', price:0.55},
{name:'Strawberry', price:1.40}
];
$scope.cart=[];
$scope.addItem = function(x){
$scope.cart.push($scope.products[x]);
};
$scope.removeItem = function(x){
$scope.cart.pop($scope.products[x]);
};
$scope.checkOut = function(){
var total = 0;
for (var i in $scope.cart) {
total += $scope.cart[i].price;
}
return total.toFixed(2);
};
});
</script>
我有一个数组是:
$scope.products=[
{name:'Orange', price:'1.15'},
{name:'Apple', price:'1.08'},
{name:'Pear', price:'1.85'},
{name:'Mango', price:'2.10'},
{name:'Blueberry', price:'0.55'},
{name:'Strawberry', price:'1.40'}
];
并且我在每个数组中都添加了一个按钮,因为我正在创建一个购物车。我创建了一个空数组,它是所选产品的购物车,但是当我尝试将这些对象添加到我的新数组时,它不起作用。代码如下:
<li ng-repeat="x in products | orderBy:'name'">
{{x.name + " : " + '$' + x.price}}
<button type="button" class="btn btn-dark" ng-click="addItem(x)">
Add product
</button>
</li>
控制器是:
$scope.cart=[];
$scope.addItem = function(x){
$scope.cart.push($scope.x);
console.log($scope.cart);
};
您将对象作为 x
传递给 ng-click
中的函数,但它不是 $scope.x
所以只需更改:
$scope.cart.push($scope.x);
到
$scope.cart.push(x);
有效的是:
<div ng-app="myApp" ng-controller="ctrl" class="container">
<h3>Lets use controllers with methods!</h3>
<p>Input first number: <input type="text" ng-model="first" class="form-control"></p>
<p>Input second number: <input type="text" ng-model="second" class="form-control"></p>
<br>
<p>Sum: {{sum()}}</p>
<p>Sum: {{mup()}}</p>
<hr>
<h3>Shopping Cart example!</h3> <br>
<div class="container-fluid">
<div style="height: 400px; width: 200px;" class="overflow-auto">
<ul>
<br>
<li ng-repeat="x in products">
{{x.name + " : " + '$' + x.price}}
<br>
<button type="button" class="btn btn-dark" ng-click="addItem($index)">Add product</button><br><br>
</li>
</ul>
</div>
<div style="height: 400px; width: 200px; margin-left: 20px" class="overflow-auto">
<ul>
<br>
<li ng-repeat="x in cart track by $index">
{{x.name + " : " + '$' + x.price}}
<button type="button" class="btn btn-dark" ng-click="removeItem($index)">Remove</button><br><br>
</li>
</ul>
</div>
<div style="margin-left: 50%; position: absolute;" class="container-sm">
<ul>
<br><br>
<p>Check out!</p>
<p style="color: red">Total paycheck: {{checkOut() | currency}}</p>
</ul>
</div>
</div>
</div>
<script>
var app = angular.module("myApp",[]);
app.controller("ctrl",function($scope){
$scope.sum = function() {
if(isNaN($scope.first) && isNaN($scope.second)){
return "Please enter a number";
}else{
return Number($scope.first) + Number($scope.second);
}
};
$scope.mup = function() {
if(isNaN($scope.first) || isNaN($scope.second)){
return "Please enter a number";
}else{
return $scope.first * $scope.second;
}
};
//Shopping cart $scope
$scope.products=[
{name:'Orange', price:1.15},
{name:'Apple', price:1.08},
{name:'Pear', price:1.85},
{name:'Mango', price:2.10},
{name:'Blueberry', price:0.55},
{name:'Strawberry', price:1.40}
];
$scope.cart=[];
$scope.addItem = function(x){
$scope.cart.push($scope.products[x]);
};
$scope.removeItem = function(x){
$scope.cart.pop($scope.products[x]);
};
$scope.checkOut = function(){
var total = 0;
for (var i in $scope.cart) {
total += $scope.cart[i].price;
}
return total.toFixed(2);
};
});
</script>