Ошибка типа: $ scope.lstLaptop.push не является функцией - PullRequest
0 голосов
/ 01 июля 2019

Я пытаюсь сделать простую форму для вставки, удаления, обновления, используя localStorage для хранения моих данных.Когда я нажимаю кнопку «Добавить», появляется сообщение об ошибке

Ошибка типа: $ scope.lstLaptop.push не является функцией.

Я вернулся к своему коду и проверил синтаксисесли я ошибаюсь, но я думаю, что мой код был всего 3 строки и выглядит как обычно.Можете ли вы сказать мне, что я что-то упустил или из-за чего проблема?

Просто проигнорировал мой другой код и проверьте мой контроллер lapCreateUpdateCtrl, пожалуйста, я не понимаю, в чем я не прав.

HTML-файл:

    <div class="container">

        <table class="table table-hover">
            <tr>
                <th>Laptop Model</th>
                <th>Price($)</th>
                <th>Option</th>
            </tr>
            <tr ng-repeat = "laptops in lstLaptop track by $index">
                <td><p ng-bind = laptops.model></p></td>
                <td><p ng-bind = laptops.price></p></td>
                <td><button type="button" ng-click="remove1($index)" 
                            class="btn btn-danger btn-xs">
                      Delete
                    </button>
                    <button type="button" ng-click="edit1($index)"
                            class="btn btn-warning btn-xs">
                      Edit
                    </button>
                    <button type="button" ng-click="update1($index)"
                            class="btn btn-info btn-xs">
                      Update
                    </button>
                </td>
            </tr>
        </table>
        <button type="button" class="btn btn-success btn-sm"
                ng-click="save()">
          Save
        </button>
    </div>
</div>
</body>

app.Файл JS:

routerApp.controller('lapCreateUpdateCtrl', ["$scope", function($scope){
    $scope.laptop = {};
    $scope.lstLaptop = [];
    function init(){
        var strLaptop = window.localStorage.getItem("LAPTOP_KEY");
        if(strLaptop){
            $scope.lstLaptop = JSON.parse(strLaptop);
        }
    }
    init();
    $scope.add1 = function(){
        $scope.lstLaptop.push($scope.laptop);
        $scope.laptop = {};
    }
    $scope.remove1 = function(index){
        $scope.lstLaptop.splice(index,1);
        alert("Deleted!");
    }
    $scope.edit1 = function(index){
        $scope.laptop = angular.copy($scope.lstLaptop[index]);
    }
    $scope.update1 = function(index){
        $scope.lstLaptop.splice(index, 1, $scope.laptop);
        $scope.laptop = {};
    }
    $scope.save=function(){
        window.localStorage.setItem("LAPTOP_KEY", JSON.stringify($scope.lstLaptop));
    }

}]);

Я хочу вводить содержимое из текстового поля

 <input type="text" ng-model="laptop.model" id="model" name="model"
        placeholder="Model" required />
 <input type="number" ng-model="laptop.price" id="price" name="price"
        placeholder="Price" required />
 <button type="button" ng-click="add()">
   Add Desktop
 </button>

1 Ответ

0 голосов
/ 01 июля 2019

Вы вызвали init() и затем внутри этой функции вы изменили $scope.lstLaptop на объект. Когда будет вызван $scope.add1, будет выдано сообщение об ошибке, поскольку объект не имеет функции push. Работает только с массивами.

Я не понимаю, чего вы хотите достичь, но вы можете сделать что-то вроде ниже. Он сохранит lstLaptop как массив

function init(){
        var strLaptop = window.localStorage.getItem("LAPTOP_KEY");
        if(strLaptop){
            $scope.lstLaptop.push(JSON.parse(strLaptop));
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...