【问题标题】:Filter in Angular.js by checking against a scope variable通过检查范围变量来过滤 Angular.js
【发布时间】:2013-12-24 11:36:39
【问题描述】:

我正在尝试从满足特定条件的对象数组中获取特定对象。

对象的 id 应该等于作用域变量$scope.lobbyid。我下面的当前方法不会将大厅对象传递给控制器​​。

选中的lobby代表网站上活动标签的数据。所以容器数组只在站点加载时获取一次。

标记

<div ng-repeat="lobby in lobbies | filter:checkLobbyID(lobby)">
    [[lobby.name]]
</div>

控制器

$scope.checkLobbyID = function($lobby) {
    return $lobby.lobbyid == $scope.lobbyid;
}

数组

"lobbies": [
    {
        "isglobal": true,
        "lobbyid": 1,
        "name": "GLOBAL",
    },
    {
        "isglobal": false,
        "lobbyid": 2,
        "name": "stackoverflow rules",
    },
    {
        "isglobal": false,
        "lobbyid": 3,
        "name": "sdadadad",
    }
]

临时解决方案是将以下代码添加到 tab-switch 事件中。但这需要一个副本和另一个范围变量。如何通过过滤器实现这一点?

angular.forEach($scope.lobbies, function(lobby) {
    if (lobby.lobbyid == $scope.lobbyid)
    $scope.currLobby = angular.copy(lobby);
});

【问题讨论】:

  • 如果你想获取单个对象,为什么要使用ng-repeat
  • 范围值经常变化,我希望标记自动获取具有正确 ID 的对象。我猜你想在更新数组时将对象的另一个副本创建到另一个范围变量中?
  • Angular 双向绑定经常实时工作,不是吗?
  • 我编辑了我的帖子。我需要根据当前选择的 id 来浏览大厅数组,该 id 存储在 $scope.lobbyid
  • 请在 plunker 中创建一个演示,概述您要完成的工作

标签: javascript angularjs filter


【解决方案1】:

您不需要标记中的大厅参数。过滤器会将其隐式传递给作用域过滤器函数

<div ng-repeat="lobby in lobbies | filter:checkLobbyID">

http://jsfiddle.net/vrwQG/

问候

【讨论】:

  • 这是完美的。正是我想要的
  • 知道如何为 checkLobbyID 调用传递参数吗?
猜你喜欢
  • 2015-05-16
  • 1970-01-01
  • 1970-01-01
  • 2015-03-28
  • 2011-11-08
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多