parent
074e289e62
commit
a5622304de
@ -154,10 +154,12 @@ function ng1ComponentDirective(selector: string, type: Type, idPrefix: string):
|
|||||||
link: (scope: angular.IScope, element: angular.IAugmentedJQuery, attrs: angular.IAttributes,
|
link: (scope: angular.IScope, element: angular.IAugmentedJQuery, attrs: angular.IAttributes,
|
||||||
parentInjector: any, transclude: angular.ITranscludeFunction): void => {
|
parentInjector: any, transclude: angular.ITranscludeFunction): void => {
|
||||||
var id = element[0].id = idPrefix + (idCount++);
|
var id = element[0].id = idPrefix + (idCount++);
|
||||||
var childInjector = parentInjector.resolveAndCreateChild([bind(NG1_SCOPE).toValue(scope)]);
|
var componentScope = scope.$new();
|
||||||
|
componentScope.$watch(() => changeDetector.detectChanges());
|
||||||
|
var childInjector =
|
||||||
|
parentInjector.resolveAndCreateChild([bind(NG1_SCOPE).toValue(componentScope)]);
|
||||||
var hostViewRef = viewManager.createRootHostView(protoView, '#' + id, childInjector);
|
var hostViewRef = viewManager.createRootHostView(protoView, '#' + id, childInjector);
|
||||||
var changeDetector: ChangeDetectorRef = hostViewRef.changeDetectorRef;
|
var changeDetector: ChangeDetectorRef = hostViewRef.changeDetectorRef;
|
||||||
scope.$watch(() => changeDetector.detectChanges());
|
|
||||||
element.bind('$remove', () => viewManager.destroyRootHostView(hostViewRef));
|
element.bind('$remove', () => viewManager.destroyRootHostView(hostViewRef));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -54,6 +54,43 @@ export function main() {
|
|||||||
async.done();
|
async.done();
|
||||||
});
|
});
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
describe('scope/component change-detection', () => {
|
||||||
|
it('should interleve scope and component expressions', inject([AsyncTestCompleter], (async) {
|
||||||
|
var log = [];
|
||||||
|
var l = function(value) {
|
||||||
|
log.push(value);
|
||||||
|
return value + ';';
|
||||||
|
};
|
||||||
|
var upgrMod: UpgradeModule = createUpgradeModule();
|
||||||
|
|
||||||
|
upgrMod.ng1Module.directive('ng1a', () => { return {template: "{{ l('ng1a') }}"}; });
|
||||||
|
upgrMod.ng1Module.directive('ng1b', () => { return {template: "{{ l('ng1b') }}"}; });
|
||||||
|
upgrMod.ng1Module.run(($rootScope) => {
|
||||||
|
$rootScope.l = l;
|
||||||
|
$rootScope.reset = () => log.length = 0;
|
||||||
|
});
|
||||||
|
|
||||||
|
upgrMod.importNg2Component(
|
||||||
|
Component({selector: 'ng2'})
|
||||||
|
.View({
|
||||||
|
template: `{{l('2A')}}<ng1a></ng1a>{{l('2B')}}<ng1b></ng1b>{{l('2C')}}`,
|
||||||
|
directives: [
|
||||||
|
upgrMod.exportAsNg2Component('ng1a'),
|
||||||
|
upgrMod.exportAsNg2Component('ng1b')
|
||||||
|
]
|
||||||
|
})
|
||||||
|
.Class({constructor: function() { this.l = l; }}));
|
||||||
|
|
||||||
|
var element = html("<div>{{reset(); l('1A');}}<ng2>{{l('1B')}}</ng2>{{l('1C')}}</div>");
|
||||||
|
upgrMod.bootstrap(element).ready(() => {
|
||||||
|
expect(document.body.textContent).toEqual("1A;2A;ng1a;2B;ng1b;2C;1C;");
|
||||||
|
// https://github.com/angular/angular.js/issues/12983
|
||||||
|
expect(log).toEqual(['1A', '1B', '1C', '2A', '2B', '2C', 'ng1a', 'ng1b']);
|
||||||
|
async.done();
|
||||||
|
});
|
||||||
|
}));
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user