Javascript angularjs和ionicframework如何实时增加喜好
我对AngularJS和IonicFramework几乎是新手。 我正在开发我自己的应用程序,其中有一个带有时间线的小社交网络(我从mysql获得,我用php用json编码)和类似的东西。这是一件非常简单的事情 我使用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",
$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));
});
}
}