TypeError: $scope.lstLaptop.push не является функцией

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

TypeError: $scope.lstLaptop.push is not a function.

Я вернулся к своему коду и проверил синтаксис, если я ошибаюсь, но я думаю, что мой код состоял всего из 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>

Какая строка вызывает эту ошибку? И каково содержимое $scope.lstLaptop при возникновении этой ошибки?

georgeawg 01.07.2019 06:30
Я хочу, чтобы контент вводился из текстового поля<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>
La Cooler 01.07.2019 06:37

Когда я начинаю нажимать кнопку добавления, появляется ошибка, и ошибка говорит TypeError: $scope.lstLaptop.push не является функцией Scope.$scope.add (app.js:168)

La Cooler 01.07.2019 06:41

Значение похоже на Модель и Цена? Я ввожу его, а затем нажимаю кнопку «Добавить». Я объявил $scope.laptop, что мой тип ввода был ng-model=laptop.model

La Cooler 01.07.2019 06:57

Ошибка гласит, что $scope.lstLaptop.push это не функция. Итак, каково значение $scope.lstLaptop, когда возникает эта ошибка?

georgeawg 01.07.2019 07:00

Я не понимаю, какое значение? я очень новичок здесь

La Cooler 01.07.2019 07:03

Вероятная причина ошибки заключается в том, что $scope.lstLaptop присваивается значение, отличное от ссылки на массив. Главный подозреваемый — оператор присваивания в функции init.

georgeawg 01.07.2019 07:08

@LaCooler посмотри на мой ответ. как я описал, вы переопределяете переменную в своей функции инициализации.

Tushar 01.07.2019 07:48

Я ценю вас, ребята, за помощь. Это сработало сейчас. Я не уверен, что не так, но я переписал его снова, так что теперь он работает.

La Cooler 01.07.2019 08:15
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
9
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

function init(){
        var strLaptop = window.localStorage.getItem("LAPTOP_KEY");
        if (strLaptop){
            $scope.lstLaptop.push(JSON.parse(strLaptop));
        }
    }

Я ничего не делал. Даже я нажимаю "за", это все равно "против".

La Cooler 01.07.2019 08:12

Другие вопросы по теме

Галерея изображений HTML CSS не создает квадраты с автоматическим или растягиванием
Измените ширину элемента g (и всего его содержимого), чтобы точно соответствовать ширине SVG
Отображение полной длины div/span ниже td tr
Почему стиль CSS «visibility:visible» появляется в моем списке узлов только тогда, когда я ввожу его непосредственно в свой HTML?
Могу ли я в начальной загрузке перенести вертикальный col-lg-2 в горизонтальную строку, когда ширина экрана уменьшается?
Несколько входных файлов с параметрами
Bootstrap Navbar Переключение активного состояния Bootstrap (связанный с JavaScript)
Нужна помощь в размещении дочернего элемента HTML за родительским элементом с помощью CSS
Могу ли я настроить таргетинг на несколько div (с одним и тем же классом), чтобы избежать специальных объектов HTML с помощью javascript?
Почему мой контейнер сетки не расширяется, несмотря на несколько элементов сетки?