Reputation: 33
I'm very new to angularjs and I have been trying to figure this out. Please check the code below to see what I mean. The titles are listed to the left, I would like the corresponding body to appear to the right when the title links are clicked. A good example can be found here, http://twotenjack.com/nashville/, look at the menus section. Any help is appreciated
[
{
"title" : "Sake / Shochu - TBD",
"Body" : "Sake / Shochu - TBD\n",
"Category" : "Beverage",
"Nid" : "19"
},
{
"title" : "Bottle Beer ",
"Body" : "Bottle Beer - TBD\n",
"Category" : "Beverage",
"Nid" : "18"
},
{
"title" : "Wine",
"Body" : "House red wine - Rotating varietal\nHouse white wine - Rotating varietal\n",
"Category" : "Beverage",
"Nid" : "17"
},
{
"title" : "On Tap",
"Body" : "Kona – Golden Lager\nKirin Ichiban – Pale Lager\nHitachino – White Ale\nSapporo Premium Draft\nAsahi Super Dry\nThree Weavers\n",
"Category" : "Beverage",
"Nid" : "16"
},
{
"title" : "San Pellegrino",
"Body" : "San Pellegrino\n",
"Category" : "Beverage",
"Nid" : "15"
},
{
"title" : "Tea",
"Body" : "Tea - House-brewed Jasmine Iced Tea\n",
"Category" : "Beverage",
"Nid" : "14"
},
{
"title" : "Soda",
"Body" : "Soda - Coke, Diet Coke, Sprite, Dr. Pepper, Root Beer, Lemonade\n",
"Category" : "Beverage",
"Nid" : "13"
},
{
"title" : "Salads",
"Body" : "Maaketo – Classic Market Salad. \nChopped romaine, carrots, avocado, smoked bacon bits, grilled chicken, almonds, mandarin, fresh wonton crisp, creamy yuzu vinaigrette\n \nTempeh with Kare – Vegetarian Goodness! \nOrganic Tempeh, Shoyu marinade, carrots, yuzu-jalapeno slaw, citrus yuzu-vinaigrette, fried egg, slow-cooked Japanese curry\n \n",
"Category" : "Food",
"Nid" : "12"
},
{
"title" : "Rice and Poultry ",
"Body" : "Karē Loco Moco: Have a Feast and Take a Nap! \nDouble Angus patty, slow-cooked Japanese curry, fried egg\n* Substitute Angus patty with chicken patty\n \nChicken Katsu with Karē: Classic Comfort \nPanko-crusted fried chicken, slow-cooked japanese curry\n* Add fried egg\n",
"Category" : "Food",
"Nid" : "11"
}
]
Here is my JS:
var app = angular.module('myApp', []);
app.controller('menuCtrl', function($scope, $http) {
$http.get("menu-json").success(function(response) {
$scope.titles = response;
var nid ="19";
$scope.isFood = function(titles) {
return titles.Category === "Food";
};
$scope.isBeverage = function(titles) {
return titles.Category === "Beverage";
};
});
});
Here is my HTML:
<div id="menu" class="wrapper clearfix" ng-app="myApp" ng-controller="menuCtrl">
<h2 class="block-title">Menu</h2>
<div class="col-md-4">
<h3 class="food">Food</h3>
<ul class="ul-food">
<li class="node{{ x.Nid }}" ng-repeat="x in titles | filter:isFood">
<a href""> {{ x.title }}</a>
</li>
</ul>
<h3 class="food">Beverage</h3>
<ul class="ul-bev">
<li ng-repeat="x in titles | filter:isBeverage">
<a href""> {{ x.title }}</a>
</li>
</ul>
</div>
<div class="col-md-8">
<div class="body">
The corresponding body from json should appear here when you click on a title
</div>
</div>
</div><!-- end wrapper-->
Upvotes: 2
Views: 1737
Reputation: 193261
I would do something like this using helper function:
<div class="col-md-4">
<h3 class="food">Food</h3>
<ul class="ul-food">
<li class="node{{ x.Nid }}" ng-repeat="x in titles | filter:isFood">
<a href="" ng-click="select(x)"> {{ x.title }}</a>
</li>
</ul>
<h3 class="food">Beverage</h3>
<ul class="ul-bev">
<li ng-repeat="x in titles | filter:isBeverage">
<a href="" ng-click="select(x)"> {{ x.title }}</a>
</li>
</ul>
</div>
<div class="col-md-8">
<div class="body">
<h2>{{selectedItem.title}}</h2>
<p>{{selectedItem.Body}}</p>
</div>
</div>
And in controller:
$scope.select = function(item) {
$scope.selectedItem = item;
};
Demo: http://plnkr.co/edit/Zb3CxG0fKTpxfi3yA2Fv?p=info
Upvotes: 1