Динамически добавить элемент в массив jg-repeat jg-script

0

Я должен выполнить массив элементов в angularjs

angular.module('app').controller('AppController', function ($scope, $timeout) {
    $scope.items = {
        item1: {
            name: "Hamburger",
            complete: "50%",
            start: "2015/09/10 11:00",
            finish: "2015/09/11 04:00",
            work: "8 hours"
        },
        item2: {
            name: "Pasta",
            complete: "50%",
            start: "2015/09/10 11:00",
            finish: "2015/09/11 04:00",
            work: "8 hours"
        },
        item3: {
            name: "Potato",
            complete: "80%",
            start: "2015/09/10 18:00",
            finish: "2015/09/11 04:00",
            work: "8 hours"
        }
    };

    $scope.items.push({
        item4: {
            name: "Ham",
            complete: "50%"...
        }
    });
}

Я хочу добавить к нему новый элемент, но он не работает.

Я попробовал метод.push(item), но он не работает со следующим сообщением в консоли

Object doesn't support property or method 'push'

Какой самый простой способ добавить элемент в этот существующий массив?

  • 0
    $ scope.items = [] вместо $ scope.items = {} должно исправить это
  • 0
    Как сказал @CodingEnthusiast, будет использоваться [] вместо {} для объявления $ scope.items. Смотрите мой ответ для деталей.
Теги:
arrays
angularjs-ng-repeat
onsen-ui

4 ответа

2
Лучший ответ

Фактически вы используете объект (а не массив)

Добавить значение к объекту: $scope.items[key] = value;

ИЛИ

Инициализировать массив вместо объекта $scope.items = [....];

  • 0
    Отличный ответ, ключ-значение помогло мне понять это. Теперь я динамически создаю объект, и перед добавлением новых объектов я инициализирую его с помощью простого $ scope.items = {};
1

Ваши данные $ scope.items не являются массивом, а объектом. Вы объявляете его с помощью { }, а объект не получает метод.push().

Если вы хотите использовать метод Array.prototype.push(), вам нужно обработать массив, так что просто измените:

$scope.items = { ..... };

От

$scope.items = [ ..... ];

Таким образом, вы сможете:

$scope.items.push({item4 : { name: "Ham", complete: "50%"...}});
1

В соответствии с вашим кодом $scope.items является объектом, а не массивом. Таким образом, $scope.items.push ошибку.

Вы можете преобразовать $scope.items в массив или использовать $scope.items.item4 = { name: "Ham", complete: "50%"...}; для установки значения.

Посмотрите на свой массив структуры данных, который имеет больше смысла, поэтому вы можете использовать методы массива.

angular.module('app').controller('AppController', function ($scope, $timeout) {
   $scope.items = [{
            name : "Hamburger",
            complete : "50%",
            start: "2015/09/10 11:00",
            finish: "2015/09/11 04:00",
            work: "8 hours"
        }, ...];

   $scope.items.push({ name: "Ham", complete: "50%"...});    
});
  • 0
    Спасибо! Очень хороший ответ Я на самом деле перепутал массив с объектом, я очень плохо знаком с AngularJS (использую его пару часов)
0

Как вы уже упоминали в коде, это javascript Object, а не массив. Только Array поддерживает нажатие. Объявите свой массив следующим образом:

$scope.items = [
        item1 : {
            name : "Hamburger",
            complete : "50%",
            start: "2015/09/10 11:00",
            finish: "2015/09/11 04:00",
            work: "8 hours"
        },
        item2 : {
            name : "Pasta",
            complete : "50%",
            start: "2015/09/10 11:00",
            finish: "2015/09/11 04:00",
            work: "8 hours"
        },
        item3 : {
            name : "Potato",
            complete : "80%",
            start: "2015/09/10 18:00",
            finish: "2015/09/11 04:00",
            work: "8 hours"
        }
    ];

Теперь вы можете нажимать новые элементы, и это не приведет к ошибке.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню