从服务器

时间:2017-02-19 04:41:05

标签: angularjs ng-repeat angular-ng-if angularjs-ng-show

我有一个社交媒体图标,只有当item.like== 1 item.userid==0profileData ()时不会突出显示(将为白色)时才启用(变为红色)按钮。我正在动态地执行此操作。因此,当为特定用户单击时,我需要再次调用函数<div class="showIcons" ng-repeat="item in pData"> <a title="Liked"> <img ng-click="unLikeUser(item.userid);" ng-if="(item.like ==1)" class="styleright" src="assets/images/like.png"></a> <a title ="Like"> <img ng-click="likeUser(item.userid);" ng-if="(item.like ==0)" class="styleright otherlike" src="assets/images/like1.png"></a> </div> 。在这种情况下,它就像整个页面闪烁加载不好看的数据。我不想调用配置文件数据,而是需要解决方案,所以只有那个特定的数据单独刷新或变成了。我尝试使用ng-show = true和ng-show = false,但是inturn使所有用户图标为true和false。

HTML:

$scope.proifleData = function(){
    $scope.pdata = res.response.data;
};

JS:

    $scope.likeUser= function(like){
          var json = {
              "request": {
                "service": {
                  "servicetype": "9",
                  "functiontype": "9000",
                "session_id": $cookieStore.get('sessionid')

                },
                "data": {
                  "like": [
                    like
                  ],
                  "addorremove": 1
                }
              }
            }
      UserService.getSocialMedia(json).then(function (res) {   


         $scope.profileData();                });
  };  

likeuser()

for differentUser(与addorremove相同的函数:0)

  $scope.pData = [
  [
    {
      "profileInfo": {
        "firstname": "shruthi",
        "lastname": "p",
        "like": 1,

      }
    }
  ],
  [
    {
      "profileInfo": {
        "firstname": "talentnew",
        "lastname": "new",
          "like": 0,

      }
    }
  ],
  [
    {
      "profileInfo": {
        "firstname": "jay",
        "lastname": "sree",
             "like": 0,

      }
    }
  ],
  [
    {
      "profileInfo": {
        "firstname": "ja",
        "lastname": "sr",
        "like": 1,

      }
    }
  ],
  [
    {
      "count": 84
    }
  ]
]

JSON:

expect

2 个答案:

答案 0 :(得分:0)

如果我理解您的问题,那么我相信您在用户点击按钮时调用profileData()时会遇到问题。

不要调用profileData()函数从服务器获取值只使用它来保存服务器的值并仅使用前端处理视图,这样你就不会再次profileData()函数

为每个数组元素分配一个唯一的id,并尝试将这些函数用于like和不同的

                $scope.unLikeUser = function(id){
                    angular.forEach(item, function(item){
                        if (id == item.id) {
                            item.like = 0;
                        }
                    })
                }

                $scope.likeUser = function(id){
                    angular.forEach(item, function(item){
                        if (id == item.id) {
                            item.like = 1;
                        }
                    })
                }

答案 1 :(得分:0)

当用户按下时将整个项目对象放入您的控制器。

查看

ng-click="likeUser(item)"

控制器

  • 获取项目对象的深层副本(itemCopy)
  • 使用itemCopy对象在第一个位置增加计数。这个 不会更新视图。
  • 如果您打算使用item,请使用此对象而不是item对象 服务器请求中的对象。
  • 之后发送类似计数更新请求到服务器然后有 成功请求
  • 然后在传递的item对象内增加like计数 作为参数。这将更新特定用户,如count in 查看,因为您使用相同的对象引用

$scope.likeUser = function(item) {
  var itemCopy = angular.copy(itme); // get a deep copy
}

你也可以为不喜欢的事件做同样的事情。希望这对你有所帮助。