如何将 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>