mirror of
https://github.com/Hopiu/angular.js.git
synced 2026-03-16 23:30:23 +00:00
fix(ngRepeat): allow for more flexible coding style in ngRepeat expression
With this change it's possible to split the ng-repeat expression into multiple lines at any point in the expression where white-space is expected. Closes #5537 Closes #5598
This commit is contained in:
parent
53ec33f07f
commit
c9705b7556
2 changed files with 34 additions and 18 deletions
|
|
@ -203,7 +203,7 @@ var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) {
|
|||
$$tlb: true,
|
||||
link: function($scope, $element, $attr, ctrl, $transclude){
|
||||
var expression = $attr.ngRepeat;
|
||||
var match = expression.match(/^\s*(.+)\s+in\s+([\r\n\s\S]*?)\s*(\s+track\s+by\s+(.+)\s*)?$/),
|
||||
var match = expression.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?\s*$/),
|
||||
trackByExp, trackByExpGetter, trackByIdExpFn, trackByIdArrayFn, trackByIdObjFn,
|
||||
lhs, rhs, valueIdentifier, keyIdentifier,
|
||||
hashFnLocals = {$id: hashKey};
|
||||
|
|
@ -215,7 +215,7 @@ var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) {
|
|||
|
||||
lhs = match[1];
|
||||
rhs = match[2];
|
||||
trackByExp = match[4];
|
||||
trackByExp = match[3];
|
||||
|
||||
if (trackByExp) {
|
||||
trackByExpGetter = $parse(trackByExp);
|
||||
|
|
|
|||
|
|
@ -177,22 +177,6 @@ describe('ngRepeat', function() {
|
|||
});
|
||||
|
||||
|
||||
it('should allow expressions over multiple lines', function() {
|
||||
scope.isTrue = function() {
|
||||
return true;
|
||||
};
|
||||
element = $compile(
|
||||
'<ul>' +
|
||||
'<li ng-repeat="item in items\n' +
|
||||
'| filter:isTrue">{{item.name}}</li>' +
|
||||
'</ul>')(scope);
|
||||
scope.items = [{name: 'igor'}];
|
||||
scope.$digest();
|
||||
|
||||
expect(element.find('li').text()).toBe('igor');
|
||||
});
|
||||
|
||||
|
||||
it('should track using provided function when a filter is present', function() {
|
||||
scope.newArray = function (items) {
|
||||
var newArray = [];
|
||||
|
|
@ -354,6 +338,38 @@ describe('ngRepeat', function() {
|
|||
});
|
||||
|
||||
|
||||
it('should allow expressions over multiple lines', function() {
|
||||
element = $compile(
|
||||
'<ul>' +
|
||||
'<li ng-repeat="item in items\n' +
|
||||
'| filter:isTrue">{{item.name}}/</li>' +
|
||||
'</ul>')(scope);
|
||||
|
||||
scope.isTrue = function() {return true;};
|
||||
scope.items = [{name: 'igor'}, {name: 'misko'}];
|
||||
|
||||
scope.$digest();
|
||||
|
||||
expect(element.text()).toEqual('igor/misko/');
|
||||
});
|
||||
|
||||
|
||||
it('should strip white space characters correctly', function() {
|
||||
element = $compile(
|
||||
'<ul>' +
|
||||
'<li ng-repeat="item \t\n \t in \n \t\n\n \nitems \t\t\n | filter:\n\n{' +
|
||||
'\n\t name:\n\n \'ko\'\n\n}\n\n | orderBy: \t \n \'name\' \n\n' +
|
||||
'track \t\n by \n\n\t $index \t\n ">{{item.name}}/</li>' +
|
||||
'</ul>')(scope);
|
||||
|
||||
scope.items = [{name: 'igor'}, {name: 'misko'}];
|
||||
|
||||
scope.$digest();
|
||||
|
||||
expect(element.text()).toEqual('misko/');
|
||||
});
|
||||
|
||||
|
||||
it('should not ngRepeat over parent properties', function() {
|
||||
var Class = function() {};
|
||||
Class.prototype.abc = function() {};
|
||||
|
|
|
|||
Loading…
Reference in a new issue