AngularJS отправляет письмо с Mandrill с результатом функции

Поэтому я пытаюсь отправить заполненную форму заказа по электронной почте с mandrill из моего приложения доставки AngularJS... все работало нормально, пока я не добавил вложенный массив в функцию. так что в основном вот что у меня есть. спасибо за поиск

вот фрагмент кода EmailController, который вызывает ошибку

{
"name": "TOTAL",
"content": "$"+$scope.total(menu)+".00"
}

Функция итога (меню) отлично работает в приложении, чтобы вычислить сумму всех элементов и выбранных опций.

вот заводская функция

 OrderFactory.total = function(items){

    var itemTotal = 0;

    angular.forEach(items, function(item) {
        var optionTotal = 0;
        var sizeTotal = 0;
        if (item.active) {
            itemTotal += item.qty * item.price;
            angular.forEach(item.flavors, function(option) {
                if (option.active) {
                    optionTotal += option.price;
                }
            });
            angular.forEach(item.sizes, function(option) {
                if (option.active) {
                    sizeTotal += option.price;
                }
            });
            itemTotal += optionTotal + sizeTotal;
        }
    });

    return itemTotal;

  };

то, через что он проходит, это меню массива [], которое имеет два вложенных массива размеров [] и flavors[] внутри.

и EmailController, и фабрика OrderFunctions работают вне этого сценария. Что мне нужно выяснить, так это то, почему функция total(меню) не предоставляет значение EmailController.

вот ошибка, которую я получил в консоли

TypeError: Cannot read property 'active' of null
at factory.js:55
at Object.r [as forEach] (angular.js:330)
at k.OrderFactory.total (factory.js:52)
at k.$scope.sendMail (controller.js:174)
at angular.js:12299
at f (angular.js:22903)
at k.$eval (angular.js:14353)
at k.$apply (angular.js:14451)
at HTMLButtonElement.<anonymous> (angular.js:22908)
at HTMLButtonElement.c (angular.js:2998)angular.js:11562 
(anonymous function)angular.js:8525 
(anonymous function)angular.js:14453 
k.$applyangular.js:22908 
(anonymous function)angular.js:2998 
c

Любые идеи? спасибо

1 ответ

Решение

Ваш код не обрабатывает условие исключения, вы должны проверить, является ли объект нулевым или нет, а затем получить доступ только к внутреннему свойству

        angular.forEach(item.flavors, function(option) {
            if (option && option.active) {
                optionTotal += option.price;
            }
        });
        angular.forEach(item.sizes, function(option) {
            if (option && option.active) {
                sizeTotal += option.price;
            }
        });
Другие вопросы по тегам