diff --git a/modules/angular2/src/core/compiler/view.js b/modules/angular2/src/core/compiler/view.js
index 2991bc128c..b5859846ee 100644
--- a/modules/angular2/src/core/compiler/view.js
+++ b/modules/angular2/src/core/compiler/view.js
@@ -449,7 +449,7 @@ export class ProtoView {
lightDom = strategy.constructLightDom(view, childView, element);
strategy.attachTemplate(element, childView);
- bindingPropagationConfig = new BindingPropagationConfig(changeDetector);
+ bindingPropagationConfig = new BindingPropagationConfig(childView.changeDetector);
ListWrapper.push(componentChildViews, childView);
}
diff --git a/modules/angular2/test/core/compiler/integration_spec.js b/modules/angular2/test/core/compiler/integration_spec.js
index 2fe59568c9..384c5acffd 100644
--- a/modules/angular2/test/core/compiler/integration_spec.js
+++ b/modules/angular2/test/core/compiler/integration_spec.js
@@ -451,30 +451,57 @@ export function main() {
})
}));
- it('should provide binding configuration config to the component', inject([AsyncTestCompleter], (async) => {
- tplResolver.setTemplate(MyComp, new Template({
- inline: '',
- directives: [[[PushBasedComp]]]
+ describe("BindingPropagationConfig", () => {
+ it("can be used to disable the change detection of the component's template",
+ inject([AsyncTestCompleter], (async) => {
+
+ tplResolver.setTemplate(MyComp, new Template({
+ inline: '',
+ directives: [[[PushBasedComp]]]
+ }));
+
+ compiler.compile(MyComp).then((pv) => {
+ createView(pv);
+
+ var cmp = view.locals.get('cmp');
+
+ cd.detectChanges();
+ expect(cmp.numberOfChecks).toEqual(1);
+
+ cd.detectChanges();
+ expect(cmp.numberOfChecks).toEqual(1);
+
+ cmp.propagate();
+
+ cd.detectChanges();
+ expect(cmp.numberOfChecks).toEqual(2);
+ async.done();
+ })
}));
- compiler.compile(MyComp).then((pv) => {
- createView(pv);
+ it('should not affect updating properties on the component', inject([AsyncTestCompleter], (async) => {
+ tplResolver.setTemplate(MyComp, new Template({
+ inline: '',
+ directives: [[[PushBasedComp]]]
+ }));
- var cmp = view.locals.get('cmp');
+ compiler.compile(MyComp).then((pv) => {
+ createView(pv);
- cd.detectChanges();
- expect(cmp.numberOfChecks).toEqual(1);
+ var cmp = view.locals.get('cmp');
- cd.detectChanges();
- expect(cmp.numberOfChecks).toEqual(1);
+ ctx.ctxProp = "one";
+ cd.detectChanges();
+ expect(cmp.prop).toEqual("one");
- cmp.propagate();
+ ctx.ctxProp = "two";
+ cd.detectChanges();
+ expect(cmp.prop).toEqual("two");
- cd.detectChanges();
- expect(cmp.numberOfChecks).toEqual(2);
- async.done();
- })
- }));
+ async.done();
+ })
+ }));
+ });
it('should create a component that injects a @Parent', inject([AsyncTestCompleter], (async) => {
tplResolver.setTemplate(MyComp, new Template({
@@ -673,11 +700,17 @@ class MyDir {
}
}
-@Component({selector: 'push-cmp'})
+@Component({
+ selector: 'push-cmp',
+ bind: {
+ 'prop': 'prop'
+ }
+})
@Template({inline: '{{field}}'})
class PushBasedComp {
numberOfChecks:number;
bpc:BindingPropagationConfig;
+ prop;
constructor(bpc:BindingPropagationConfig) {
this.numberOfChecks = 0;