1

I'm trying to use ng-repeat to print a set of comments from the dishDetailController in blockquote. I've tried but I do not know how to do this. Any help would be appreciated, thanks. Here is the code.

            <head>
                <meta charset="utf-8">
                <meta http-equiv="X-UA-Compatible" content="IE=edge">
                <meta name="viewport" content="width=device-width, initial-scale=1">
                <!-- The above 3 meta tags *must* come first in the head; any other head
                     content must come *after* these tags -->
                <title>Ristorante Con Fusion: Menu</title>
                <!-- Bootstrap -->
                <link href="../bower_components/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet">
                <link href="../bower_components/bootstrap/dist/css/bootstrap-theme.min.css" rel="stylesheet">
                <link href="../bower_components/font-awesome/css/font-awesome.min.css" rel="stylesheet">
                <link href="styles/bootstrap-social.css" rel="stylesheet">
                <link href="styles/mystyles.css" rel="stylesheet">

                <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
                <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
                <!--[if lt IE 9]>
                <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
                <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
                <![endif]-->
            </head>

            <body>

            <div class="container">
                <div class="row row-content">
                    <div class="col-xs-12" ng-controller="dishDetailController as dish">
                        <ul class="media-list">
                            <li class="media">
                                <div class="media-left media-middle">
                                    <a href="#">
                                        <img class="media-object img-thumbnail"
                                             ng-src="{{dish.image}}" alt="Uthapizza">
                                    </a>
                                </div>
                                <div class="media-body">
                                    <h2 class="media-heading">{{dish.name}}
                                        <span class="label label-danger">{{dish.label}}</span>
                                        <span class="badge">{{dish.price | currency}}</span>
                                    </h2>
                                    <p>{{dish.description}}</p>
                                </div>
                            </li>
                        </ul>
                    </div>
                    <div class="col-xs-9 col-xs-offset-1">
                        <h3>Customer Comments</h3>
                        <blockquote>
                            <!--In this blockquote. -->
                        </blockquote>
                    </div>
                </div>

            </div>

            <script src="../bower_components/angular/angular.min.js"></script>
            <script>

                var app = angular.module('confusionApp', []);

                app.controller('dishDetailController', function ($scope) {

                    var dish = {
                        name: 'Uthapizza',
                        image: 'images/uthapizza.png',
                        category: 'mains',
                        label: 'Hot',
                        price: '4.99',
                        description: 'A unique combination of Indian Uthappam (pancake) and Italian pizza, topped with Cerignola olives, ripe vine cherry tomatoes, Vidalia onion, Guntur chillies and Buffalo Paneer.',
                        comments: [
                            {
                                rating: 5,
                                comment: "Imagine all the eatables, living in conFusion!",
                                author: "John Lemon",
                                date: "2012-10-16T17:57:28.556094Z"
                            },
                            {
                                rating: 4,
                                comment: "Sends anyone to heaven, I wish I could get my mother-in-law to eat it!",
                                author: "Paul McVites",
                                date: "2014-09-05T17:57:28.556094Z"
                            },
                            {
                                rating: 3,
                                comment: "Eat it, just eat it!",
                                author: "Michael Jaikishan",
                                date: "2015-02-13T17:57:28.556094Z"
                            },
                            {
                                rating: 4,
                                comment: "Ultimate, Reaching for the stars!",
                                author: "Ringo Starry",
                                date: "2013-12-02T17:57:28.556094Z"
                            },
                            {
                                rating: 2,
                                comment: "It's your birthday, we're gonna party!",
                                author: "25 Cent",
                                date: "2011-12-02T17:57:28.556094Z"
                            }

                        ]
                    };

                    $scope.dish = dish;

                });

            </script>

            </body>

            </html>

4 Answers 4

1

var app = angular.module('confusionApp', []);

app.controller('dishDetailController', function($scope) {

  var dish = {
    name: 'Uthapizza',
    image: 'images/uthapizza.png',
    category: 'mains',
    label: 'Hot',
    price: '4.99',
    description: 'A unique combination of Indian Uthappam (pancake) and Italian pizza, topped with Cerignola olives, ripe vine cherry tomatoes, Vidalia onion, Guntur chillies and Buffalo Paneer.',
    comments: [{
        rating: 5,
        comment: "Imagine all the eatables, living in conFusion!",
        author: "John Lemon",
        date: "2012-10-16T17:57:28.556094Z"
      }, {
        rating: 4,
        comment: "Sends anyone to heaven, I wish I could get my mother-in-law to eat it!",
        author: "Paul McVites",
        date: "2014-09-05T17:57:28.556094Z"
      }, {
        rating: 3,
        comment: "Eat it, just eat it!",
        author: "Michael Jaikishan",
        date: "2015-02-13T17:57:28.556094Z"
      }, {
        rating: 4,
        comment: "Ultimate, Reaching for the stars!",
        author: "Ringo Starry",
        date: "2013-12-02T17:57:28.556094Z"
      }, {
        rating: 2,
        comment: "It's your birthday, we're gonna party!",
        author: "25 Cent",
        date: "2011-12-02T17:57:28.556094Z"
      }

    ]
  };

  $scope.dish = dish;

});
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.1/angular.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/>
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" rel="stylesheet"/>
<div class="container" ng-app='confusionApp'>
  <div class="row row-content" ng-controller="dishDetailController as dish">
    <div class="col-xs-12" >
      <ul class="media-list">
        <li class="media">
          <div class="media-left media-middle">
            <a href="#">
              <img class="media-object img-thumbnail" ng-src="dish.image" alt="Uthapizza">
            </a>
          </div>
          <div class="media-body">
            <h2 class="media-heading">{{dish.name}}
                                        <span class="label label-danger">{{dish.label}}</span>
                                        <span class="badge">{{dish.price | currency}}</span>
                                    </h2>
            <p>{{dish.description}}</p>
          </div>
        </li>
      </ul>
    
</div>
    <div class="col-xs-9 col-xs-offset-1">
      <h3>Customer Comments</h3>
      
      <blockquote ng-repeat="com in dish.comments">
        <!--In this blockquote. -->
        {{ com.comment }}
        {{ com.rating }}
        {{ com.author }}
      </blockquote>
    </div>
  </div>

  </div>

The issue you are facing is that the controller is not valid in the blockquote segment.

The div with ng-controller="dishDetailController as dish" is being closed before this particular div. To overcome this, you can move the segment to the above div.

<div class="row row-content" ng-controller="dishDetailController as dish">
.
.
.
  <blockquote ng-repeat="com in dish.comments">
    <!--In this blockquote. -->
    {{ com.comment }}
    {{ com.rating }}
    {{ com.author }}
  </blockquote>
</div>

Here is a working code pen: http://codepen.io/BoyWithSilverWings/pen/bqzaaK

Sign up to request clarification or add additional context in comments.

Comments

1

Try this

<blockquote ng-repeat="item in dish.comments">
      {{item.comment}} - {{item.author}}                  
</blockquote>

Comments

0

First you should be assigning your ng-app and ng-controller to the parent container which will wrap your blockquote items, since it will not work from your current setup, and from your markup, I can't see any ng-app as well.

See below:

var app = angular.module("confusionApp", []);
app.controller("dishDetailController", function ($scope) {
                    var dish = {
                        name: 'Uthapizza',
                        image: 'images/uthapizza.png',
                        category: 'mains',
                        label: 'Hot',
                        price: '4.99',
                        description: 'A unique combination of Indian Uthappam (pancake) and Italian pizza, topped with Cerignola olives, ripe vine cherry tomatoes, Vidalia onion, Guntur chillies and Buffalo Paneer.',
                        comments: [
                            {
                                rating: 5,
                                comment: "Imagine all the eatables, living in conFusion!",
                                author: "John Lemon",
                                date: "2012-10-16T17:57:28.556094Z"
                            },
                            {
                                rating: 4,
                                comment: "Sends anyone to heaven, I wish I could get my mother-in-law to eat it!",
                                author: "Paul McVites",
                                date: "2014-09-05T17:57:28.556094Z"
                            },
                            {
                                rating: 3,
                                comment: "Eat it, just eat it!",
                                author: "Michael Jaikishan",
                                date: "2015-02-13T17:57:28.556094Z"
                            },
                            {
                                rating: 4,
                                comment: "Ultimate, Reaching for the stars!",
                                author: "Ringo Starry",
                                date: "2013-12-02T17:57:28.556094Z"
                            },
                            {
                                rating: 2,
                                comment: "It's your birthday, we're gonna party!",
                                author: "25 Cent",
                                date: "2011-12-02T17:57:28.556094Z"
                            }

                        ]
                    };

                    $scope.dish = dish;

});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div class="container" ng-controller="dishDetailController" ng-app="confusionApp">
                <div class="row row-content">
                    <div class="col-xs-12">
                        <ul class="media-list">
                            <li class="media">
                                <div class="media-left media-middle">
                                    <a href="#">
                                        <img class="media-object img-thumbnail"
                                             ng-src="{{dish.image}}" alt="Uthapizza">
                                    </a>
                                </div>
                                <div class="media-body">
                                    <h2 class="media-heading">{{dish.name}}
                                        <span class="label label-danger">{{dish.label}}</span>
                                        <span class="badge">{{dish.price | currency}}</span>
                                    </h2>
                                    <p>{{dish.description}}</p>
                                </div>
                            </li>
                        </ul>
                    </div>
                    <div class="col-xs-9 col-xs-offset-1">
                        <h3>Customer Comments</h3>
                        <blockquote ng-repeat="item in dish.comments">
                            {{item}}
                        </blockquote>
                    </div>
                </div>

            </div>

Comments

0

First, you need to add ng-app directive to your html code. For example: <body ng-app="confusionApp">.

Then you need to change ng-controller="dishDetailController as dish" to the ng-controller="dishDetailController".

You can read more about ng-controller directive (and when you have to use as) here.

To print set a set of comments you would use ng-repeat

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.