AngularJS抛出未知错误

时间:2014-10-08 13:27:29

标签: javascript angularjs

我的代码就像这样

<body>
<div>
    <table ng-app='myApp'>
        <thead>

        </thead>
        <tbody ng-controller="MainCtrl">
            <tr ng-repeat="prdElement in palletElement">

                <td>
                    {{prdElement.name}}
                </td>

                <td>
                    {{prdElement.itemId}}
                </td>
                <td>
                    {{prdElement.shipmentId}}
                </td>
                <td>
                    {{prdElement.itemCode}}
                <td>
                    {{prdElement.description}}
                </td>

                <td>
                    {{prdElement.handlingUnit}}
                </td>
                <td>
                    {{prdElement.weight}}
                </td>
                <td>
                    {{prdElement.class}}
                </td>
                <td>
                    {{prdElement.lenght}}
                </td>

                <td>
                    {{prdElement.width}}
                </td>
                <td>
                    {{prdElement.height}}
                </td>
                <td>
                    {{prdElement.flag}}
                </td>

                <td>
                    <input type="text" ng-model="prdElement.quantity" placeholder=" Code" required />

                </td>
                <td>

                    <button ng-click="newPrdItem( prdElement,$event)">Submit</button>

                </td>
            </tr>
            <tr>

            </tr>
        </tbody>

    </table>
</div>

(function () {
    angular.module('myApp', []).controller('MainCtrl', function ($scope) {

        var counter = 0;

        $scope.palletElement = [{
            name: 'Pallet 1',
            itemId: '284307',
            shipmentId: 'eb44f690-c97a-40e3-be2a-0449559e171a',
            itemCode: '',
            description: 'Bicycle parts - frame',
            quantity: '31',
            handlingUnit: 'CTN',
            weight: '613.04',
            class:'',
            lenght: '102',
            width: '42',
            height: '61',
            flag:'P'

        }, {
            name: 'Pallet 2',
            itemId: '284308',
            shipmentId: 'eb44f690-c97a-40e3-be2a-0449559e171a',
            itemCode: '',
            description: 'Bicycle parts - fork',
            quantity: '22',
            handlingUnit: 'CTN',
            weight: '242.99',
            class: '',
            lenght: '75',
            width: '34',
            height: '18',
            flag: 'P'
        }]

        $scope.newPrdItem = function (prdElement, $event) {
            counter++;
            alert(prdElement.name);
            prdElement.push({
                name: prdElement.name,
                itemId: prdElement.itemId,
                shipmentId: prdElement.shipmentId,
                itemCode: prdElement.itemCode,
                description: prdElement.description,
                quantity: prdElement.quantity,
                handlingUnit: prdElement.handlingUnit,
                weight: prdElement.weight -10,
                class: prdElement.class,
                lenght: prdElement.lenght,
                width: prdElement.width,
                height: prdElement.height,
                flag: prdElement.flag,
            });

        }

    });
}());

所有看起来都没问题,但这会在按钮点击时抛出一个未知错误

  

TypeError:undefined不是函数       在Scope。$ scope.newPrdItem

     

Fiddle

2 个答案:

答案 0 :(得分:1)

您通过在prdElement上发出push调用将prdElement.push({ 视为数组,但这实际上是从视图传递的对象:

这条线是失败的。

var items = [];
$scope.newPrdItem = function (prdElement, $event) {
            counter++;
            alert(prdElement.name);
            items.push({
                name: prdElement.name,
                itemId: prdElement.itemId,
                shipmentId: prdElement.shipmentId,
                itemCode: prdElement.itemCode,
                description: prdElement.description,
                quantity: prdElement.quantity,
                handlingUnit: prdElement.handlingUnit,
                weight: prdElement.weight -10,
                class: prdElement.class,
                lenght: prdElement.lenght,
                width: prdElement.width,
                height: prdElement.height,
                flag: prdElement.flag,
            });

        }

我会创建一个单独的数组来跟踪被点击的项目

{{1}}

答案 1 :(得分:0)

您只能.push()到数组。但是你传递的参数prdElement是一个Object,而不是一个数组,因此prdElement.push()不是一个定义的函数!

你最想要的是palletElement。