proper handlig of $element in filters

This commit is contained in:
Misko Hevery 2010-07-15 13:35:00 -07:00
parent 9abd10e7b8
commit 1de82283db
2 changed files with 9 additions and 6 deletions

View file

@ -76,8 +76,8 @@ function compileBindTemplate(template){
});
bindTemplateCache[template] = fn = function(element){
var parts = [], self = this,
oldElement = this.hasOwnProperty('$element') ? this.$element : undefined;
this.$element = element;
oldElement = this.hasOwnProperty('$element') ? self.$element : undefined;
self.$element = element;
for ( var i = 0; i < bindings.length; i++) {
var value = bindings[i].call(self, element);
if (isElement(value))
@ -86,7 +86,7 @@ function compileBindTemplate(template){
value = toJson(value, true);
parts.push(value);
};
this.$element = oldElement;
self.$element = oldElement;
return parts.join('');
};
}

View file

@ -73,11 +73,14 @@ describe("directives", function(){
});
it('should have $element set to current bind element', function(){
angularFilter.myFilter = function(){
this.$element.text('HELLO');
var innerText;
angularFilter.myFilter = function(text){
innerText = this.$element.text();
return text;
};
var scope = compile('<div>before<div ng:bind-template="{{0|myFilter}}"></div>after</div>');
var scope = compile('<div>before<div ng:bind-template="{{\'HELLO\'|myFilter}}">INNER</div>after</div>');
expect(scope.$element.text()).toEqual("beforeHELLOafter");
expect(innerText).toEqual('INNER');
});
});