Я пытаюсь создать простую форму для вставки, удаления, обновления с использованием localStorage для хранения моих данных. Когда я нажимаю кнопку «Добавить», он показывает ошибку
TypeError: $scope.lstLaptop.push is not a function.
Я вернулся к своему коду и проверил синтаксис, если я ошибаюсь, но я думаю, что мой код состоял всего из 3 строк и выглядел как обычно. Можете ли вы сказать мне, что я что-то упустил или в чем проблема на самом деле?
Просто проигнорировал мой другой код и проверьте мой контроллер lapCreateUpdateCtrl, пожалуйста, я понятия не имею, в чем я ошибаюсь.
<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>
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>
<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>Когда я начинаю нажимать кнопку добавления, появляется ошибка, и ошибка говорит TypeError: $scope.lstLaptop.push не является функцией Scope.$scope.add (app.js:168)
Значение похоже на Модель и Цена? Я ввожу его, а затем нажимаю кнопку «Добавить». Я объявил $scope.laptop, что мой тип ввода был ng-model=laptop.model
Ошибка гласит, что $scope.lstLaptop.push это не функция. Итак, каково значение $scope.lstLaptop, когда возникает эта ошибка?
Я не понимаю, какое значение? я очень новичок здесь
Вероятная причина ошибки заключается в том, что $scope.lstLaptop присваивается значение, отличное от ссылки на массив. Главный подозреваемый — оператор присваивания в функции init.
@LaCooler посмотри на мой ответ. как я описал, вы переопределяете переменную в своей функции инициализации.
Я ценю вас, ребята, за помощь. Это сработало сейчас. Я не уверен, что не так, но я переписал его снова, так что теперь он работает.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы вызвали init(), а затем внутри этой функции вы изменили $scope.lstLaptop на объект. Когда будет вызван $scope.add1, он выдаст ошибку, поскольку у объекта нет функции push. Работает только с массивами.
Я не понимаю, чего вы хотите достичь, но вы можете сделать что-то вроде ниже. Он сохранит lstLaptop как массив
function init(){
var strLaptop = window.localStorage.getItem("LAPTOP_KEY");
if (strLaptop){
$scope.lstLaptop.push(JSON.parse(strLaptop));
}
}
Я ничего не делал. Даже я нажимаю "за", это все равно "против".
Какая строка вызывает эту ошибку? И каково содержимое
$scope.lstLaptopпри возникновении этой ошибки?