比较两组对象

时间:2016-01-03 18:57:30

标签: angularjs

我有一个名为$scope.users的范围,它会返回我应用中的所有用户,

[{"id":1,"name":"Peter Boomsma"},
 {"id":2,"name":"Jan Jansen"},
 {"id":3,"name":"Kees Keesen"},
 {"id":4,"name":"Piet Pietersen"}]

然后我有一个名为$scope.current_user的范围,它返回当前用户,以及他所关注的用户的ID,

{"id":4,"name":"Piet Pietersen","following":[
  {"id":1},{"id":2},{"id":4}]
}

我有一个显示所有用户的ng-repeat,以及每个用户followUser个操作,

%ul{"ng-repeat" => "user in users"}
  %li
    name: {{ user.name }}
    %a{"ng-click" => "followUser(user)"} Follow user.

问题在于我无法区分已经被关注的用户和未被关注的用户。所以行动followUser始终存在。我想向用户提供当前用户正在执行的其他操作,例如unfollowUser

我得到了当前用户关注的用户的ID,但我不知道如何为这些用户提供其他按钮。类似于unfollowUser

*更新*

通过使用Mihail他的建议,我得到了它(至少有点),

当我转到我的用户模板时,我加载了userCtrl,

usersService.loadUsers().then(function(response) {
  $scope.users = response.data;

  angular.forEach(response, function(user){
    $scope.user = user

    $scope.isFollowed = function(userId) {
      var following = $scope.current_user.following;
      for (var i=0; i<following.length; i++) {
        if (following[i].id == userId) {
          return true;
        }
      }
      return false;
    }
  })
})

在我的模板中,我有,

%ul{"ng-repeat" => "user in users"}
  %li
    name: {{ user.name }}
    %a{"ng-click" => "followUser(user)", "ng-show" => "!isFollowed(user.id)"} follow
    %a{"ng-click" => "unfollowUser(user)", "ng-show" => "isFollowed(user.id)"} unfollow

这很好用。当用户被跟随时,则使用unfollowUser函数。问题是,当我取消关注用户时,视图不会更新。我必须刷新页面以查看取消关注操作的效果。

我已尝试在unfollowUser操作结束时添加init,如此,

$scope.unfollowUser = function(user){
  unfollowFriend.unfollowFriend(user).then(function(){
  },function(){
  }).then(init);
  Notification.success(user.name + ' is verwijderd als vriend.');
}

init,

var init = function(){
  console.log ('renew')
  usersService.loadUsers().then(function(response) {
    $scope.users = response.data;

    angular.forEach(response, function(user){
      $scope.user = user

      $scope.isFollowed = function(userId) {
        var following = $scope.current_user.following;
        for (var i=0; i<following.length; i++) {
          if (following[i].id == userId) {
            return true;
          }
        }
        return false;
      }
    })
  })
}

我在浏览器日志中收到renew消息,但视图未更新。

2 个答案:

答案 0 :(得分:2)

我不擅长haml,所以我会写一个简单的html示例:

....
fragmentTransaction.commit();
fragmentManager.executePendingTransactions();
fragmentCheckbox = (CheckBox) findViewById(R.id.checkBoxInFragment);
fragmentCheckbox.setChecked(false);
...

答案 1 :(得分:1)

您可以创建一个函数来检查是否已按下给定用户,如:

$scope.isFollowed = function (userID) {
  //check if the userID is in$scope.current_user.following
  //return a boolean
}

然后在HTML代码中,您可以根据此函数进行检查,以显示followUser或unfollowUser。