diff --git a/README.md b/README.md
index c539836..bf3bd33 100644
--- a/README.md
+++ b/README.md
@@ -129,6 +129,7 @@ Attributes of angular treecontrol
- `labelSelected` : inject classes into the div element around the label only when the node is selected
- `order-by` : value for ng-repeat to use for ordering sibling nodes
- `reverse-order` : whether or not to reverse the ordering of sibling nodes based on the value of `order-by`
+- `order-by-expression` : Expression evaluated by ng-repeat to use for ordering sibling nodes
- `filter-expression` : value for ng-repeat to use for filtering the sibling nodes
- `filter-comparator` : value for ng-repeat to use for comparing nodes with the filter expression
diff --git a/angular-tree-control.js b/angular-tree-control.js
index e6aaaff..0d24cb3 100644
--- a/angular-tree-control.js
+++ b/angular-tree-control.js
@@ -36,6 +36,7 @@
onNodeToggle: "&",
options: "=?",
orderBy: "@",
+ orderByExpression: "=?",
reverseOrder: "@",
filterExpression: "=?",
filterComparator: "=?"
@@ -197,7 +198,12 @@
};
//tree template
- var orderBy = $scope.orderBy ? ' | orderBy:orderBy:reverseOrder' : '';
+ var orderBy = '';
+ if ($scope.orderByExpression) {
+ orderBy = ' | orderBy:orderByExpression:reverseOrder';
+ } else if ($scope.orderBy) {
+ orderBy = ' | orderBy:orderBy:reverseOrder';
+ }
var template =
'
' +
'- ' +
diff --git a/test/angular-tree-control-test.js b/test/angular-tree-control-test.js
index 9fb4d9b..deed710 100644
--- a/test/angular-tree-control-test.js
+++ b/test/angular-tree-control-test.js
@@ -1,5 +1,5 @@
describe('treeControl', function() {
- var $compile, $rootScope, element, num;
+ var $compile, $rootScope, orderBy, element, num;
beforeEach(function () {
module('treeControl');
@@ -357,34 +357,38 @@ describe('treeControl', function() {
expect(element.find('li:eq(2)').text()).toBe('b');
});
- it('should order sibling nodes in normal order', function() {
- $rootScope.treedata = [
- { label: "a", children: [] },
- { label: "c", children: [] },
- { label: "b", children: [] }
- ];
- $rootScope.predicate = 'label';
- $rootScope.reverse = false;
- element = $compile('{{node.label}}')($rootScope);
- $rootScope.$digest();
- expect(element.find('li:eq(0)').text()).toBe('a');
- expect(element.find('li:eq(1)').text()).toBe('b');
- expect(element.find('li:eq(2)').text()).toBe('c');
- });
-
- it('should order sibling nodes in reverse order', function() {
- $rootScope.treedata = [
- { label: "a", children: [] },
- { label: "c", children: [] },
- { label: "b", children: [] }
- ];
- $rootScope.predicate = 'label';
- $rootScope.reverse = true;
- element = $compile('{{node.label}}')($rootScope);
- $rootScope.$digest();
- expect(element.find('li:eq(0)').text()).toBe('c');
- expect(element.find('li:eq(1)').text()).toBe('b');
- expect(element.find('li:eq(2)').text()).toBe('a');
+ [false, true].forEach(function (orderbyExpression) {
+ it('should order sibling nodes in normal order', function() {
+ $rootScope.treedata = [
+ { label: "a", children: [] },
+ { label: "c", children: [] },
+ { label: "b", children: [] }
+ ];
+ $rootScope.predicate = 'label';
+ $rootScope.reverse = false;
+ orderBy = orderbyExpression ? 'order-by-expression="predicate"' : 'order-by="{{predicate}}"';
+ element = $compile('{{node.label}}')($rootScope);
+ $rootScope.$digest();
+ expect(element.find('li:eq(0)').text()).toBe('a');
+ expect(element.find('li:eq(1)').text()).toBe('b');
+ expect(element.find('li:eq(2)').text()).toBe('c');
+ });
+
+ it('should order sibling nodes in reverse order', function() {
+ $rootScope.treedata = [
+ { label: "a", children: [] },
+ { label: "c", children: [] },
+ { label: "b", children: [] }
+ ];
+ $rootScope.predicate = 'label';
+ $rootScope.reverse = true;
+ orderBy = orderbyExpression ? 'order-by-expression="predicate"' : 'order-by="{{predicate}}"';
+ element = $compile('{{node.label}}')($rootScope);
+ $rootScope.$digest();
+ expect(element.find('li:eq(0)').text()).toBe('c');
+ expect(element.find('li:eq(1)').text()).toBe('b');
+ expect(element.find('li:eq(2)').text()).toBe('a');
+ });
});
it('should be able to accept alternative children variable name', function () {