diff options
| -rw-r--r-- | src/Scope.js | 5 | ||||
| -rw-r--r-- | src/directives.js | 8 | ||||
| -rw-r--r-- | test/directivesSpec.js | 9 |
3 files changed, 18 insertions, 4 deletions
diff --git a/src/Scope.js b/src/Scope.js index 9a20c214..687d3628 100644 --- a/src/Scope.js +++ b/src/Scope.js @@ -127,10 +127,11 @@ function createScope(parent, services, existing) { var watch = expressionCompile(watchExp), last; function watcher(){ - var value = watch.call(instance); + var value = watch.call(instance), + lastValue = last; if (last !== value) { last = value; - instance.$tryEval(listener, exceptionHandler, value, last); + instance.$tryEval(listener, exceptionHandler, value, lastValue); } } instance.$onEval(PRIORITY_WATCH, watcher); diff --git a/src/directives.js b/src/directives.js index d9cf7962..a3575d62 100644 --- a/src/directives.js +++ b/src/directives.js @@ -30,8 +30,9 @@ angularDirective("ng-bind", function(expression){ value = this.$tryEval(expression, function(e){ error = toJson(e); }), - isHtml = value instanceof HTML; - if (!isHtml && isObject(value)) { + isHtml = value instanceof HTML, + isDomElement = isElement(value); + if (!isHtml && !isDomElement && isObject(value)) { value = toJson(value); } if (value != lastValue || error != lastError) { @@ -41,6 +42,9 @@ angularDirective("ng-bind", function(expression){ if (error) value = error; if (isHtml) { element.html(value.html); + } else if (isDomElement) { + element.html(''); + element.append(value); } else { element.text(value); } diff --git a/test/directivesSpec.js b/test/directivesSpec.js index eb8a9785..42869a05 100644 --- a/test/directivesSpec.js +++ b/test/directivesSpec.js @@ -44,6 +44,15 @@ describe("directives", function(){ expect(lowercase(element.html())).toEqual('<div>hello</div>'); }); + it('should ng-bind element', function() { + angularFilter.myElement = function() { + return jqLite('<a>hello</a>'); + }; + var scope = compile('<div ng-bind="0|myElement"></div>'); + scope.$eval(); + expect(lowercase(element.html())).toEqual('<a>hello</a>'); + }); + it('should ng-bind-template', function() { var scope = compile('<div ng-bind-template="Hello {{name}}!"></div>'); scope.$set('name', 'Misko'); |
