2015-07-08 2 views
-1

Я изучаю angularJS, и я делаю простые ответы на вопросы, используя его.

Итак, у меня есть контроллер, который приносит мне записи запросов из базы данных и другого контроллера, который приносит мне ответы/комментарии по этому вопросу из базы данных.

Проблема: я показываю одну запись за раз, используя {{names [ques] .question}}, так что, когда ques равно нулю, он напечатает первый вопрос, который у меня есть предыдущие и следующие кнопки, для управления значением «ques». Но мне нужны только комментарии для этого вопроса, вместо этого мой контроллер отправляет мне все записи.

Получение данных с PHP-сервера Запуск MySQL

Вот мой html-

<div ng-controller="customersCtrl"> 
<div class="well"> 
{{ names[ques].question }} 
{{names[ques].id}} 
</div> 

    <span ng-controller="commentsCtrl"> 
    <div class="well" ng-repeat="x in comments"> 
    <span style="color:#3b5998;">{{x.name}}</span><br> 
    <span ng-bind-html="x.solution | unsafe"></span> 
    </div> 
    </span> 

</div> 

А вот script-

var app = angular.module('myApp', []); 
app.controller('customersCtrl', function($scope, $http) { 
    $http.get("test.php") 
    .success(function (response) {$scope.names = response.records;}); 
}); 
app.controller('commentsCtrl', function($scope, $http) {  
    $http.get("comment_view.php") 
    .success(function (response) {$scope.comments = response.records;}); 
}); 

Все, что я хочу, что если есть способ, я могу передать идентификатор Ques в comment_view.php, чтобы комментарии отображались в соответствии с отображаемым вопросом.

PS: Это мои первые вопросы в stackoverflow. Надеюсь, кто-то поможет мне. Спасибо заранее.

ответ

1

Для этого вам необходимо посмотреть значение параметра (ques) для изменений, а когда оно изменится, обновите список комментариев.

Например, в вашем commentsCtrl:

// watch for changes to the question index 
$scope.$watch('ques', function(newValue, oldValue) { 
    // check if it has actually changed 
    if (newValue !== oldValue) 
    { 
    // request the comments for this particular question by 
    // passing the question index back to the server 
    $http.get('comment_view.php', { params: { ques: newValue } }) 
     .success(function(response) { 
     $scope.comments = response.records; 
     }); 
    } 
}); 

Затем на сервере, можно использовать параметр ques GET для запроса для комментариев этого конкретного вопроса.


Обратите внимание, что вы можете лучше организовать свой код, поместив в $http логики в одну функцию, что-то вроде:

function loadCommentsForQuestion(questionIdx) 
{ 
    $http.get('comment_view.php', { params: { ques: newValue } }) 
    .success(function(response) { 
     $scope.comments = response.records; 
    }); 
} 

И тогда вы можете просто позвонить этой функции в любое время вы хотите для загрузки комментариев по конкретному вопросу. Например, ваш $watch() вызов может быть упрощена:

// watch for changes to the question index 
$scope.$watch('ques', function(newValue, oldValue) { 
    // check if it has actually changed 
    if (newValue !== oldValue) 
    { 
    loadCommentsForQuestion(newValue); 
    } 
}); 
+0

Я пытался, так как Вы отправили этот ответ, но $ _GET [ «Ques»] не получает значение {Ques: NEWVALUE} из-за какой-то причине я не Не знаю. –

+0

Откуда я называю loadCommentsForQuestion? Не могли бы вы объяснить, пожалуйста, –

+0

Я добавил разъяснение к моему ответу для функции loadCommentsForQuestion. Я также исправил использование '$ http.get()', в котором отсутствовал ключ ['params'] (https://docs.angularjs.org/api/ng/service/$http#usage) (это, вероятно, почему он не работает для вас). Пожалуйста, проверьте еще раз. – Agop

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