Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript angularjs和ionicframework如何实时增加喜好_Javascript_Json_Angularjs_Ionic Framework_Ionic - Fatal编程技术网

Javascript angularjs和ionicframework如何实时增加喜好

Javascript angularjs和ionicframework如何实时增加喜好,javascript,json,angularjs,ionic-framework,ionic,Javascript,Json,Angularjs,Ionic Framework,Ionic,我对AngularJS和IonicFramework几乎是新手。 我正在开发我自己的应用程序,其中有一个带有时间线的小社交网络(我从mysql获得,我用php用json编码)和类似的东西。这是一件非常简单的事情 我使用$http.get检索json数据,如下所示: [{ "id": "2", "timestamp": "2015-04-15 23:26:48", "autore": "reallidontknow",

我对AngularJS和IonicFramework几乎是新手。 我正在开发我自己的应用程序,其中有一个带有时间线的小社交网络(我从mysql获得,我用php用json编码)和类似的东西。这是一件非常简单的事情

我使用
$http.get
检索json数据,如下所示:

        [{
        "id": "2",
        "timestamp": "2015-04-15 23:26:48",
        "autore": "reallidontknow",
        "likes": "2",
        "testo": "asd"
        },
        {
        "id": "3",
        "timestamp": "2015-04-15 23:26:39",
        "autore": "costi",
        "likes": "2",
        "testo": "rotfl"
        },
        {
        "id": "1",
        "timestamp": "2015-04-15 23:06:27",
        "autore": "stevvi",
        "likes": "1",
        "testo": "aaaaahahah"
        }
        ]
      <div class="item tabs tabs-secondary tabs-icon-left" ng-hide="post.has_liked">
        <a class="tab-item" href="#" ng-click="like(post.id)">
          <i class="icon ion-thumbsup"></i>
          Mi Piace!
        </a>
      </div>
      <div class="item tabs tabs-secondary tabs-icon-left" ng-show="post.has_liked">
        <span class="tab-item">
          <i class="icon ion-thumbsup"></i>
          +1
        </span>
      </div>
这是我的HTML:

            <div class="list card" ng-repeat="post in posts">
          <div class="item item-avatar">
            <img src="img/icon.png"> 
            <h2>{{post.autore}}</h2>
            <p>{{post.timestamp}}</p>
          </div>

          <div class="item item-body">
            <p ng-bind-html="post.testo">

            </p>
            <p>
                <a href="#" class="subdued"><i>{{post.likes}}</i> Mi Piace</a>
            </p>
          </div>

          <div class="item tabs tabs-secondary tabs-icon-left">
            <a class="tab-item" href="#" ng-click="like(post.id)">
              <i class="icon ion-thumbsup"></i>
              Mi Piace!
            </a>
          </div>
        </div>
我的问题是,如果我点击“喜欢”按钮,我必须使用
$window.location
重新加载整个页面(这是错误的!!!!),正如你所看到的,因为如果我只使用
$state
命令重新加载,它不会产生任何效果。。如果我使用
$route.reload()
,情况也一样

我必须实时更改类似按钮(放置+1),并将按钮从“活动”更改为“非活动”

对于这个问题,如果一个人已经喜欢(它保存在localstorage中,以便记住它)并且该人再次单击“喜欢”,则会出现(必须是)警报。但是,当此人单击“确定”并在另一个位置单击时,警报会再次出现。这是什么

如下更改html(只需按钮div):

        [{
        "id": "2",
        "timestamp": "2015-04-15 23:26:48",
        "autore": "reallidontknow",
        "likes": "2",
        "testo": "asd"
        },
        {
        "id": "3",
        "timestamp": "2015-04-15 23:26:39",
        "autore": "costi",
        "likes": "2",
        "testo": "rotfl"
        },
        {
        "id": "1",
        "timestamp": "2015-04-15 23:06:27",
        "autore": "stevvi",
        "likes": "1",
        "testo": "aaaaahahah"
        }
        ]
      <div class="item tabs tabs-secondary tabs-icon-left" ng-hide="post.has_liked">
        <a class="tab-item" href="#" ng-click="like(post.id)">
          <i class="icon ion-thumbsup"></i>
          Mi Piace!
        </a>
      </div>
      <div class="item tabs tabs-secondary tabs-icon-left" ng-show="post.has_liked">
        <span class="tab-item">
          <i class="icon ion-thumbsup"></i>
          +1
        </span>
      </div>

关于不立即看到+1的问题,这是因为只有在从服务器收到“成功响应”时才更新本地存储

为了解决这个问题,你应该更换

<a class="tab-item" href="#" ng-click="like(post.id)">
“post=data;”可能需要一些更改,具体取决于您从服务器收到的响应+您可能必须执行$scope。$apply()或者直接更新$scope.posts以刷新屏幕上的数据,但一般的想法是,您必须更新$scope.posts中的喜欢数,以便在屏幕上刷新

无论如何,您应该知道,最佳实践是在服务器端保存和验证哪个用户喜欢什么,因为在客户端保存和验证这一点意味着用户可以编辑/删除数据+同一用户将能够从不同的机器/浏览器登录,并喜欢同一帖子几次


我希望这能帮助您重新开始…

类似服务器的问题是我必须“重新加载”页面才能看到+1这不是我要求的。我只有通过客户端才有问题。服务器正常,我添加了like,问题是如何在客户端实时添加+1并禁用like按钮。谢谢教授,我根据你的问题修改了我的答案。但是使用整个“post”变量会有什么变化?是的,我知道,它保存在服务器上,我知道它不太安全,但只是一个小应用程序,只供十几个朋友使用。整个post对象也包含了喜欢的数量。你也可以把它改成post.likes++;而不依赖服务器响应并将按钮“like”设置为禁用如何?因为如果我在
.success()
函数中执行
$scope.success=“something”
,所有按钮都会显示相同的消息。但是如何做:如果在
localStorage
中,那篇文章很受欢迎,那么只在那篇文章中显示其他内容,而不是“mipiace”(在意大利语中是“Like”的意思)。。我希望你能理解。不过谢谢你!
<a class="tab-item" href="#" ng-click="like(post)">
$scope.like = function(post) {
    var lsVar = "like"+post.id;
    if (window.localStorage[lsVar] != undefined)
    {
        return;
    }
    else
    {

        urLike = "http://my_link.php?ggettt="+post.id;
        $http.get(urLike).success(function(data, status, headers, config) {
            console.log(JSON.stringify(data));
            if ((data.idPost == "false") || (data.idPost == "null"))
            {
                alert("Error.\n retry!");
                $window.location.reload(true);
            }
            else if (data.idPost == "noId") {
                alert("Error FATAL.");
                $window.location.reload(true);
            }
            else {
                window.localStorage[lsVar] = idPost;
                post = data;
                alert("LIKE inserted");
                });

            }
        }).error(function(data, status, headers, config) {
            console.log(JSON.stringify(data));
        });
    }
}