So I am building a food order form and I have a list of options that need to be attached to the individual item index and not to the parent.. As of right now everything works but when i add an option to one product in the array all products have the same value added... ie.. if i choose the vanilla option for latte all drinks in the ng-repeat array will have the vanilla option set to true.. here is what i have..
first here is the html markup of the options view
<md-card ng-repeat="item in items.results | filter:true">
<img ng-src="{{item.img}}"
class="md-card-image"
alt="">
<md-card-content class="content">
<h2 class="md-title">{{ item.name }}</h2>
<h4>{{ item.price | currency }}</h4>
{{flavors(item)}}
<md-list>
<p class="md-subhead">Choose Your Flavor</p>
<md-divider></md-divider>
<md-list-item ng-repeat="option in options.results"
layout="row">
<p> {{ option.name }} </p>
<span flex></span>
<p> {{ option.price | currency}} </p>
<md-checkbox aria-label="option.active"
class="md-accent"
ng-model="option.active"></md-checkbox>
</md-list-item>
</md-list>
</md-card-content>
<md-action-bar layout="row"
layout-align="end center">
<md-button class="md-fab md-accent fab"
aria-label="Remove From Cart"
ng-click="remove(item)"
ng-class="{active:item.active}">
<md-icon md-svg-src="img/icons/remove.svg"></md-icon>
</md-button>
</md-action-bar>
</md-card>
as you can see i have an array of items all with an array of options
here is the factory that retrieves the data from Parse
app.factory('ParseData', function($http) {
var ParseFactory = {};
ParseFactory.getItems = function() {
return $http({method : 'GET',url : 'https://api.parse.com/1/classes/DrinkMenu/', headers:
{ 'X-Parse-Application-Id':xxx',
'X-Parse-REST-API-Key':'xxx'}})
.then(function(response) {
return response.data;
});
};
ParseFactory.getOptions = function() {
return $http({method : 'GET',url : 'https://api.parse.com/1/classes/Options/', headers:
{ 'X-Parse-Application-Id':'xxx',
'X-Parse-REST-API-Key':'xxx'}})
.then(function(response) {
return response.data;
});
};
return ParseFactory;
});
and lastly the controller
app.controller('AppController', function($scope, ParseData){
ParseData.getItems().then(function(data) {
$scope.items = data;
}).catch(function() {
alert('error');
});
ParseData.getOptions().then(function(data) {
$scope.options = data;
}).catch(function() {
alert('error');
});
});
I know this is a little confusing to follow but i tried to explain the issues as best i could.. thanks for taking a look..
You should put the flavor model inside the
item
, not a general model as you are doing. The way you are doing the item from the list ofoptions.results
has the active one, then It will change every selection that uses theoptions.results
. Change to:OR