@@ -392,6 +392,7 @@ main() {
392
392
beforeEach (module ((AngularModule module) {
393
393
module.directive (SimpleComponent );
394
394
module.directive (IoComponent );
395
+ module.directive (ParentExpressionComponent );
395
396
module.directive (PublishMeComponent );
396
397
}));
397
398
@@ -408,6 +409,35 @@ main() {
408
409
}));
409
410
}));
410
411
412
+ it ('should create a component that can access parent scope' , inject (() {
413
+ $rootScope.fromParent = "should not be used" ;
414
+ $rootScope.val = "poof" ;
415
+ var element = $('<parent-expression fromParent=val></parent-expression>' );
416
+
417
+ $compile (element)(injector, element);
418
+
419
+ ParentExpressionComponent .lastTemplateLoader.template.then (expectAsync1 ((_) {
420
+ expect (renderedText (element)).toEqual ('inside poof' );
421
+ }));
422
+ }));
423
+
424
+ it ('should behave nicely if a mapped attribute is missing' , inject (() {
425
+ var element = $('<parent-expression></parent-expression>' );
426
+ $compile (element)(injector, element);
427
+ ParentExpressionComponent .lastTemplateLoader.template.then (expectAsync1 ((_) {
428
+ expect (renderedText (element)).toEqual ('inside ' );
429
+ }));
430
+ }));
431
+
432
+ it ('should behave nicely if a mapped attribute evals to null' , inject (() {
433
+ $rootScope.val = null ;
434
+ var element = $('<parent-expression fromParent=val></parent-expression>' );
435
+ $compile (element)(injector, element);
436
+ ParentExpressionComponent .lastTemplateLoader.template.then (expectAsync1 ((_) {
437
+ expect (renderedText (element)).toEqual ('inside ' );
438
+ }));
439
+ }));
440
+
411
441
it ('should create a component with IO' , inject (() {
412
442
var element = $(r'<div><io attr="A" expr="name" ondone="done=true"></io></div>' );
413
443
$compile (element)(injector, element);
@@ -480,6 +510,15 @@ class IoComponent {
480
510
}
481
511
}
482
512
513
+ class ParentExpressionComponent {
514
+ static String $template = '<div>inside {{fromParent()}}</div>' ;
515
+ static Map $map = {"fromParent" : "&" };
516
+ static TemplateLoader lastTemplateLoader;
517
+ ParentExpressionComponent (Scope shadowScope, TemplateLoader templateLoader) {
518
+ lastTemplateLoader = templateLoader;
519
+ }
520
+ }
521
+
483
522
class PublishMeComponent {
484
523
static String $template = r'<content>{{ctrlName.value}}</content>' ;
485
524
static String $publishAs = 'ctrlName' ;
0 commit comments