0

我正在使用 yeoman 的 angular-fullstack 生成器制作一个小型民意调查应用程序。我已经为民意调查设置了一些虚拟数据。当用户点击投票时,他们会被引导到一个查看页面,在那里他们可以根据为问题设置的答案输入他们的选择。

目前,当用户选择一个选项并按下提交时,更改会在客户端更新,但我无法知道为数据库 POST 请求放置什么内容。

这是view视图:

<div class="container">
        <h3>{{poll.title}}</h3>
        <form ng-submit="submitForm()">

            <div ng-repeat="answer in poll.answers">
                <label><input type="radio" name="option" ng-model="radioData.index" value="{{$index}}"/>
                    {{ answer.value }} - {{ answer.votes }} Votes
                </label>
            </div>
            <button class="btn btn-success" type="submit">Vote!</button>
        </form>
</div>

这是它的控制器:

'use strict';

angular.module('angFullstackCssApp')
    .controller('ViewCtrl', function ($scope, $routeParams, $http) {
        $http.get('/api/polls/' + $routeParams._id).success(function (poll) {
            console.log(poll);
            $scope.poll = poll;
            $scope.radioData = {
                index: 0
            };
            $scope.viewPoll = true;

            $scope.alreadyVoted = false;

            $scope.submitForm = function () {
                $scope.alreadyVoted = true;
                console.log($scope.radioData.index);
                $scope.poll.answers[$scope.radioData.index].votes += 1;
                // Change database entry here
            };
        });
    });

这是我的投票模式:

var PollSchema = new Schema({
    creator: String,
    title: String,
    answers: [{
        value: String,
        votes: Number
    }]
});

所以我的问题是: -

  • 如何编写合适的 POST 请求以将答案的投票增加一?

  • 像我一样在这个 GET 请求中编写我的代码是否正确?感觉必须有一种更合适的方法来做到这一点,特别是因为我在其中调用了另一个请求。

4

1 回答 1

0

您只需要在成功回调中将您的投票分配给 $scope.poll。其他变量可以在该回调之外设置。

对我来说,为你的答案分配一个 id 是有意义的,然后你可以告诉你的 api 哪个答案 ID 应该得到额外的投票,然后传递。

    $scope.submitForm = function() {
         $http.post('/api/addVote/', 
             { answerId: $scope.votedAnswerId }
         ).success(function () {
             alert("success");
         }).catch(function () {
             alert("some error occurred");
         });
    };

您的输入变为: <input type="radio" name="option" ng-model="$parent.votedAnswerId" value="{{ answer.id }}"/>

(为什么是 $parent?因为 ng-repeat 在你的控制器范围内创建了它自己的范围。)

于 2015-10-16T21:03:12.130 回答