AngularJS 使用函数结果用 Mandrill 发送电子邮件

AngularJS send email with Mandrill with result from function

所以我正在尝试从我的 AngularJS 交付应用程序发送带有 mandrill 的完整订单电子邮件...一切正常,直到我在函数中添加了一个嵌套数组。所以基本上这就是我所拥有的。感谢观看

这是触发错误的 EmailController 代码片段

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

total(menu) 函数在应用程序中完美运行,可以计算所有项目和所选选项的总数。

这里是工厂函数

 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;

  };

它正在经历的是一个数组 menu[],其中有两个嵌套数组 size[] 和 flavors[]。

EmailController 和 OrderFunctions 工厂都在这个场景之外工作。我需要弄清楚的是为什么 total(menu) 函数没有为 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

有什么想法吗?谢谢

你的代码没有处理异常情况,你应该检查对象是否为空然后只访问内部 属性

        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;
            }
        });