Función de ordenación personalizada en ng-repeat

Tengo un conjunto de mosaicos que muestran un cierto número dependiendo de la opción seleccionada por el usuario. Ahora me gustaría implementar una ordenación por el número que se muestra.

El siguiente código muestra cómo lo he implementado (al obtener / establecer un valor en el alcance de las tarjetas primarias). Ahora, debido a que la función orderBy toma una cadena, intenté establecer una variable en el alcance de la tarjeta llamada curOptionValue y ordenar por eso, pero no parece funcionar.

Entonces, la pregunta es, ¿cómo se crea una función de clasificación personalizada?

<div ng-controller="aggViewport" >
<div class="btn-group" >
    <button ng-click="setOption(opt.name)" ng-repeat="opt in optList" class="btn active">{{opt.name}}</button>
</div>
<div id="container" iso-grid width="500px" height="500px">
    <div ng-repeat="card in cards" class="item {{card.class}}" ng-controller="aggCardController">
        <table width="100%">
            <tr>
                <td align="center">
                    <h4>{{card.name}}</h4>
                </td>
            </tr>
            <tr>
                <td align="center"><h2>{{getOption()}}</h2></td>
            </tr>
        </table>        
    </div>
</div>

y controlador:

module.controller('aggViewport',['$scope','$location',function($scope,$location) {
    $scope.cards = [
        {name: card1, values: {opt1: 9, opt2: 10}},
        {name: card1, values: {opt1: 9, opt2: 10}}
    ];

    $scope.option = "opt1";

    $scope.setOption = function(val){
        $scope.option = val;
    }

}]);

module.controller('aggCardController',['$scope',function($scope){
    $scope.getOption = function(){
        return $scope.card.values[$scope.option];
    }
}]);