aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--docs/content/error/ngTransclude/orphan.ngdoc12
-rw-r--r--src/ng/directive/ngTransclude.js10
-rwxr-xr-xtest/ng/compileSpec.js16
3 files changed, 37 insertions, 1 deletions
diff --git a/docs/content/error/ngTransclude/orphan.ngdoc b/docs/content/error/ngTransclude/orphan.ngdoc
new file mode 100644
index 00000000..5ac25432
--- /dev/null
+++ b/docs/content/error/ngTransclude/orphan.ngdoc
@@ -0,0 +1,12 @@
+@ngdoc error
+@name ngTransclude:orphan
+@fullName Orphan ngTransclude Directive
+@description
+
+Occurs when an `ngTransclude` occurs without a transcluded ancesstor element.
+
+This error often occurs when you have forgotten to set `transclude: true` in some directive definition, and then used `ngTranslude` in the driective's template.
+
+To resolve, either remove the offending `ngTransclude` or check that `transclude: true` is included in the intended directive definition.
+
+Consult the API documentation for {@link guide/directive writing directives} to learn more.
diff --git a/src/ng/directive/ngTransclude.js b/src/ng/directive/ngTransclude.js
index d7c9cd44..490ea21f 100644
--- a/src/ng/directive/ngTransclude.js
+++ b/src/ng/directive/ngTransclude.js
@@ -52,7 +52,15 @@
*
*/
var ngTranscludeDirective = ngDirective({
- controller: ['$transclude', function($transclude) {
+ controller: ['$element', '$transclude', function($element, $transclude) {
+ if (!$transclude) {
+ throw minErr('ngTransclude')('orphan',
+ 'Illegal use of ngTransclude directive in the template! ' +
+ 'No parent directive that requires a transclusion found. ' +
+ 'Element: {0}',
+ startingTag($element));
+ }
+
// remember the transclusion fn but call it during linking so that we don't process transclusion before directives on
// the parent element even when the transclusion replaces the current element. (we can't use priority here because
// that applies only to compile fns and not controllers
diff --git a/test/ng/compileSpec.js b/test/ng/compileSpec.js
index c6ba5480..580d51c3 100755
--- a/test/ng/compileSpec.js
+++ b/test/ng/compileSpec.js
@@ -2834,6 +2834,22 @@ describe('$compile', function() {
});
+ it('should throw on an ng-translude element inside no transclusion directive', function() {
+ inject(function ($rootScope, $compile) {
+ // we need to do this because different browsers print empty attributres differently
+ try {
+ $compile('<div><div ng-transclude></div></div>')($rootScope);
+ } catch(e) {
+ expect(e.message).toMatch(new RegExp(
+ '^\\\[ngTransclude:orphan\\\] ' +
+ 'Illegal use of ngTransclude directive in the template! ' +
+ 'No parent directive that requires a transclusion found\. ' +
+ 'Element: <div ng-transclude.+'));
+ }
+ });
+ });
+
+
it('should make the result of a transclusion available to the parent directive in post-linking phase (template)',
function() {
module(function() {