首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AngularJS投票制度-防止多票投票

AngularJS投票制度-防止多票投票
EN

Stack Overflow用户
提问于 2015-05-08 16:24:05
回答 1查看 1.3K关注 0票数 3

我正在尝试使用AngularJS和Ionic框架创建一个投票系统。我使用ng-重复循环处理来自JSON数组的一系列用户帖子。每个帖子都有一个向上投票和一个否决按钮。在选择了一个后,我的按钮就被禁用了。我目前遇到的问题是,不管用户是否重新打开应用程序,该按钮都是禁用的。我的目标是防止多人投票。目前,我正在使用此方法在单击按钮后禁用该按钮:

代码语言:javascript
复制
<button class="button button-small button-light" ng-click="upThread({{thread.id}})" ng-disabled="upDisabled[thread.id]">  
  <i class="icon ion-thumbsup"></i>
</button>
<button class="button button-small button-light" ng-click="downThread({{thread.id}})" ng-disabled="downDisabled[thread.id]">
  <i class="icon ion-thumbsdown"></i>
</button>


$scope.upDisabled = {};
$scope.downDisabled = {};

$scope.upThread = function(id) {
    ...
    $scope.upDisabled[id] = true;
    $scope.downDisabled[id] = false;
}

$scope.downThread = function(id) {
    ...
    $scope.downDisabled[id] = true;
    $scope.upDisabled[id] = false;
}`

这对于禁用按钮非常有用。现在,问题是,我要求Cache使控制器为false,否则添加时我的新帖子不会在视图中更新。这意味着,当重新加载应用程序或在路由/视图之间切换时,按钮再次启用,这不是我想要的。此外,将缓存设置为true也不会使应用程序重新打开后按钮处于禁用状态。我尝试过使用本地存储来存储$scope.upDisabled和$scope.downDisabled,但是它破坏了JSON格式。我尝试过远程存储,并收到了同样的结果。例如,$scope.upDisabled和$scope.downDisabled存储的数据如下:

{“2”:真,“3”:假,“4”:真}

诸若此类。但是,由于存储在本地存储或数据库中需要我使用JSON.stringify,您可以猜到这些引号会带来麻烦,我也会使用嵌套的JSON。因此,本地存储中的数据不返回正确的格式。我已知的问题/选择是双重的。

  1. 是否有更好的解决方案来持续禁用这些按钮?
  2. 如何正确格式化来自本地存储的JSON?

另外要注意的是:由于这是一个使用Ionic的移动/混合应用程序,所以我没有使用cookie,但我确实创建了一个令牌系统来进行类似的操作。

编辑:感谢那些回复的人和你的建议。我目前正在使用一个MySQL数据库来记录投票情况(可能稍后切换到SQLite ) @aorfevre:我以前看过SQLite插件,以后可能会使用它。我终于让一切按我想要的方式运作了。

代码语言:javascript
复制
$scope.upDisabled = {};
$scope.downDisabled = {};
$scope.upCheck = {};
$scope.downCheck = {};

...Votes Loading function up here
...Thread loading Function up here
.finally(function(){
angular.forEach($scope.threads,function(value,index){
    angular.forEach($scope.upCheck,function(value2,index){
        if(value.id == value2.threadID)
        {
            $scope.upDisabled[value.id] = true;
            $scope.downDisabled[value.id] = false;
        }
    })
})

angular.forEach($scope.threads,function(value,index){
    angular.forEach($scope.downCheck,function(value2,index){
        if(value.id == value2.threadID)
        {
            $scope.downDisabled[value.id] = true;
            $scope.upDisabled[value.id] = false;
        }
    })
})
}
$scope.loadVotes();
$scope.loadThreads();

至于服务器端(PHP与):

代码语言:javascript
复制
public function upvoteThread($id, $token)
{
    $thread = Thread::find($id);
    $score = $thread->score;
    $score = $score + 1;
    $thread->score = $score;
    $thread->save();

    $voted = ThreadVote::where('threadID','=',$id)->where('token','=',$token)->get();

    if($voted->isEmpty())
    {
        $upVote = new ThreadVote;
        $upVote->threadID = $id;
        $upVote->token = $token;
        $upVote->upVote = 'true';
        $upVote->downVote = 'false';
        $upVote->save();
    } 
    else 
    {
        DB::table('thread_votes')
            ->where('threadID', '=', $id)
            ->where('token','=',$token)
            ->update(array('upVote' => 'true', 'downVote' => 'false')
        );
    }

    return Response::json(array('status'=>1))->setCallback(Input::get('callback'));
}

public function getUpVotes($token)
{
    $votes = ThreadVote::where('token','=',$token)
    ->where('upVote','=','true')
    ->select('threadID','upVote')
    ->get();

    return Response::json($votes)->setCallback(Input::get('callback'));
}

...Similar downVote Function...

照现在的样子。当按下按钮时,它会保存用户的令牌、threadID和投票到数据库。加载视图时,基于令牌和threadID的信息作为JSON数组加载,与线程数组相关联,如果threadID和thread.id匹配,则将其推入"threadID":bool ("1":true )的上/下禁用范围。

EN

回答 1

Stack Overflow用户

发布于 2015-05-08 19:01:31

如果您管理大量的帖子,我将再次建议您实现DB。

我个人认为localStorage用于几个首选项,而不是存储数据库。

因此,如果您只针对ios / android,我建议您使用https://github.com/litehelpers/Cordova-sqlite-storage

如果您的目标是WindowsPhone 8.1,那么实现并不简单,而且我还面临着一些关于WindowsPhone& C++编译librairy结构的问题(更详细的信息,在这里:https://issues.apache.org/jira/browse/CB-8866 )

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30128548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档