2015-10-23 1 views
0

У меня динамически изменяющийся массив на основе другого кода, и я пытаюсь получить данные из них.

Вот пример одного динамически генерируемый массив под $ scope.filtereditem:

[{ 
    "active": true, 
    "createdAt": "2015-10-05T20:19:58.264Z", 
    "desc": "With arugula, smoked almonds & chipotle vinaigrette", 
    "flavors": [{ 
    "active": true, 
    "name": "Chocolate", 
    "price": 8 
    }, { 
    "active": false, 
    "name": "Strawberry", 
    "price": 8 
    }, { 
    "active": false, 
    "name": "Hazelnut", 
    "price": 8 
    }, { 
    "active": false, 
    "name": "Mint", 
    "price": 8 
    }], 
    "img": "https://signsrestaurant.ca/wp-content/uploads/2015/09/Watermelon-Quinoa-Jimaca-Salad.jpg", 
    "name": "Watermelon Quinoa Jicama Salad (<span class=\"vegan\">VE</span>, <span class=\"gfree\">GF</span>, <span class=\"dfree\">DF</span>)", 
    "objectId": "x1zpkWmvmP", 
    "price": 14, 
    "qty": 1, 
    "sides": [{ 
    "active": false, 
    "name": "Soup" 
    }, { 
    "active": false, 
    "name": "Salad" 
    }, { 
    "active": false, 
    "name": "Fries" 
    }], 
    "sizes": [{ 
    "active": false, 
    "name": "Small", 
    "price": 5 
    }, { 
    "active": true, 
    "name": "Medium", 
    "price": 10 
    }, { 
    "active": false, 
    "name": "Large", 
    "price": 15 
    }], 
    "type": "Soup", 
    "updatedAt": "2015-10-21T18:09:37.499Z" 
}, { 
    "active": true, 
    "createdAt": "2015-10-05T20:35:01.363Z", 
    "desc": "Buffalo mozzarella, tomato, marinated artichoke hearts, black olives, pesto & balsamic drizzle", 
    "flavors": [{ 
    "active": false, 
    "name": "Vanilla", 
    "price": 8 
    }, { 
    "active": false, 
    "name": "Almond", 
    "price": 8 
    }, { 
    "active": true, 
    "name": "Hazelnut", 
    "price": 8 
    }, { 
    "active": false, 
    "name": "Caramel", 
    "price": 8 
    }], 
    "img": "https://signsrestaurant.ca/wp-content/uploads/2015/09/Mediterranean-Salad.jpg", 
    "name": "Mediterranean Salad (<span class=\"veg\">V</span>, <span class=\"gfree\">GF</span>)", 
    "objectId": "nI5VSpdBUn", 
    "price": 15, 
    "qty": 2, 
    "sides": [{ 
    "active": false, 
    "name": "Soup" 
    }, { 
    "active": false, 
    "name": "Salad" 
    }, { 
    "active": false, 
    "name": "Fries" 
    }], 
    "sizes": [{ 
    "active": false, 
    "name": "Small", 
    "price": 0 
    }, { 
    "active": true, 
    "name": "Medium", 
    "price": 5 
    }, { 
    "active": false, 
    "name": "Large", 
    "price": 10 
    }], 
    "type": "Salad", 
    "updatedAt": "2015-10-21T18:09:33.422Z" 
}] 

Это всего лишь пример, и изменения массива динамически на основе другого кода. То, что я хочу достичь, - это получить определенные данные в форме элемента сферы, назовем его как $ scope.filteredmenu

Здесь я застрял. Вот то, что я до сих пор для этого:

$scope.filteredmenu = function() { 
    var order = " "; 
    var side = " "; 
    angular.forEach($scope.filtereditem, function(item) { 
     var flavor = " "; 
     var size = " "; 
     order += item.name + "Qty: " + item.qty + " , "; 
     side += "Side: " + item.type + " , "; 
     angular.forEach(item.flavors, function(option) { 
     if (option && option.active) { 
      flavor += "Flavor: " + option.name + " , "; 
     } 
     }); 
     angular.forEach(item.sizes, function(option) { 
     if (option && option.active) { 
      size += "Size: " + option.name + " , "; 
     } 
     }); 
     menuorder += order + side + size + flavor; 
    }); 
    return menuorder; 
    }; 

В принципе, мне нужен выход в следующем формате:

Для каждого элемента, «item.name» Кол-во: «item.qty», Side : «item.type», «Вкус» (в зависимости от того, какой из активных): option.name (в item.flavors), размер (в зависимости от того, что активен): option.name (в item.sizes)

В конце концов, я пытаюсь отправить результат $ scope.filteredmenu через API электронной почты. Я не уверен, что я делаю неправильно. Любая помощь с этим кодом будет высоко оценена.

+0

Не самое лучшее решение, но ваш код кажется нормально, за исключением боковой части. С какими проблемами вы сталкиваетесь? – Icycool

+0

Спасибо, что ответили! Да, я не создаю выход, когда отправляю его по электронной почте Mandrill [API] (https://mandrillapp.com/api/docs/messages.html). Я отправил $ scope.filteredmenu, но я не получаю никакого вывода, не знаю почему. Я передал все остальные функции, и они отлично работали. – user3839044

ответ

1

Были некоторые синтаксические ошибки:

var output = function() { 
var order = " "; 
var side = " "; 
//Not defined 
var menuorder = ''; 
angular.forEach($scope.filtereditem, function(item) { 
    var flavor = " "; 
    var size = " "; 
    order += item.name + "Qty: " + item.qty + " , "; 
    //plus sign was missing 
    side += "Side: " + item.type + " , "; 
    angular.forEach(item.flavors, function(option) { 
    if (option && option.active) { 
     flavor += "Flavor: " + option.name + " , "; 
    } 
    }); 
    angular.forEach(item.sizes, function(option) { 
    if (option && option.active) { 
     size += "Size: " + option.name + " , "; 
    } 
    }); 
    menuorder += order + side + size + flavor; 
}); 
return menuorder; 
} 

$scope.filteredmenu = output(); 

здесь рабочий JSFiddler https://jsfiddle.net/hefc5ewe/

+1

Большое вам спасибо! Теперь у меня это работает :), Гений! – user3839044

Смежные вопросы