Я пытаюсь разрешить пользователю оставить комментарий, где он может быть отображен. Тем не менее, он не работает должным образом, так как я могу отобразить его в качестве предварительного просмотра, но при отправке он не сохраняется в виде массива, в котором хранятся другие комментарии. После отладки я обнаружил, что это привязка к моему $ scope.review, но он передавался моему массиву в виде пустого формата по умолчанию, как показано на веб-странице. Исходный код можно найти по адресу http://plnkr.co/edit/q5fRIG6DzTegi3Ir1y8G?p=preview / а> . (Прокомментировал сброс первоначального состояния и области, что также дает ту же ошибку).

Javascript

    .controller('DishCommentController', ['$scope', function($scope) {

        $scope.review = {name:"", rating:"Five", comment:"",date:""};
            $scope.submitComment = function () {

            $scope.review.date = new Date().toISOString();

            //  Push comment into the dish's comment array
            $scope.dish.comments.push("$scope.review");
             //reset  form to pristine
           // $scope.commentForm.$setPristine="";
             //reset  JavaScript object that holds your comment
           // $scope.review = {name:"", rating:"Five", comment:"",date:""};
        }

HTML

        <div class="media-list">
                <ul ng-show="!commentForm.comment.$error.required && !commentForm.comment.$pristine && !commentForm.name.$error.required && !commentForm.name.$pristine">
                    <blockquote>
                        <p>{{review.rating}} Stars</p>
                        <p>{{review.comment}}</p>
                        <footer>By {{review.name}} on {{review.date | date:'mediumDate'}} </footer>
                    </blockquote>
                </ul>
            </div>
1
Jason Leung 18 Дек 2015 в 04:12

3 ответа

Лучший ответ

Согласитесь с Лукасом, вам нужно добавить объект, а не строку. Также ваши новые имена полей обзора не соответствуют существующим полям в существующих обзорах

.controller('DishCommentController', ['$scope', function($scope) {

            $scope.review = {
                                   rating:5,
                                   comment:"",
                                   author:"",
                                   date:""
                               };
                $scope.submitComment = function () {

                $scope.review.date = new Date().toISOString();

                //  Push comment into the dish's comment array
                $scope.dish.comments.push($scope.review);
                 //reset  form to pristine
                $scope.commentForm.$setPristine="";
                 //reset  JavaScript object that holds your comment
                $scope.review = {author:"", rating:5, comment:"",date:""};
            }

        }])

Обратите внимание, что я изменил «name» на «author», а значение рейтинга с «Five» на 5. Однако вам нужно будет проверить привязки в html «предварительного просмотра», чтобы соответствовать изменениям!

Измененный план здесь

0
Mr. Bellis 18 Дек 2015 в 01:49

Вы нажимаете на строку, тогда как вам нужно нажать на объект:

$scope.dish.comments.push($scope.review);

Кроме того, $scope.dish.comments принадлежит DishDetailController. Метод submitComment принадлежит DishCommentController. Область действия определяется контроллером, поэтому они не будут знать о существовании друг друга.

Вам нужно поместить методы в один и тот же контроллер, если вы хотите разделить область видимости

1
Lucas Rodriguez 18 Дек 2015 в 01:16

Вам нужно нажать на объект:

$scope.dish.comments.push($scope.review);
1
vedo27 18 Дек 2015 в 01:15