feat(core): drop ChangeDetectionStrategy.OnPushObserve
BREAKING CHANGE: `OnPushObserve` was an experimental feature for Dart and had conceptual performance problems, as setting up observables is slow. Use `OnPush` instead.
This commit is contained in:
@ -106,21 +106,6 @@ export function getDefinition(id: string): TestDefinition {
|
||||
[_DirectiveUpdating.basicRecords[0], _DirectiveUpdating.basicRecords[1]], genConfig);
|
||||
testDef = new TestDefinition(id, cdDef, null);
|
||||
|
||||
} else if (id == "onPushObserveBinding") {
|
||||
var records = _createBindingRecords("a");
|
||||
let cdDef = new ChangeDetectorDefinition(id, ChangeDetectionStrategy.OnPushObserve, [], records,
|
||||
[], [], genConfig);
|
||||
testDef = new TestDefinition(id, cdDef, null);
|
||||
|
||||
} else if (id == "onPushObserveComponent") {
|
||||
let cdDef = new ChangeDetectorDefinition(id, ChangeDetectionStrategy.OnPushObserve, [], [], [],
|
||||
[], genConfig);
|
||||
testDef = new TestDefinition(id, cdDef, null);
|
||||
|
||||
} else if (id == "onPushObserveDirective") {
|
||||
let cdDef = new ChangeDetectorDefinition(id, ChangeDetectionStrategy.OnPushObserve, [], [], [],
|
||||
[_DirectiveUpdating.recordNoCallbacks], genConfig);
|
||||
testDef = new TestDefinition(id, cdDef, null);
|
||||
} else if (id == "updateElementProduction") {
|
||||
var genConfig = new ChangeDetectorGenConfig(false, false, true);
|
||||
var records = _createBindingRecords("name");
|
||||
@ -151,12 +136,7 @@ export function getAllDefinitions(): TestDefinition[] {
|
||||
allDefs = allDefs.concat(StringMapWrapper.keys(_DirectiveUpdating.availableDefinitions));
|
||||
allDefs = allDefs.concat(_availableEventDefinitions);
|
||||
allDefs = allDefs.concat(_availableHostEventDefinitions);
|
||||
allDefs = allDefs.concat([
|
||||
"onPushObserveBinding",
|
||||
"onPushObserveComponent",
|
||||
"onPushObserveDirective",
|
||||
"updateElementProduction"
|
||||
]);
|
||||
allDefs = allDefs.concat(["updateElementProduction"]);
|
||||
return allDefs.map(getDefinition);
|
||||
}
|
||||
|
||||
|
@ -51,7 +51,6 @@ import {JitProtoChangeDetector} from 'angular2/src/core/change_detection/jit_pro
|
||||
import {OnDestroy} from 'angular2/src/core/linker/interfaces';
|
||||
|
||||
import {getDefinition} from './change_detector_config';
|
||||
import {createObservableModel} from './change_detector_spec_util';
|
||||
import {getFactoryById} from './generated/change_detector_classes';
|
||||
import {IS_DART} from 'angular2/src/facade/lang';
|
||||
import {EventEmitter, ObservableWrapper} from 'angular2/src/facade/async';
|
||||
@ -1105,102 +1104,6 @@ export function main() {
|
||||
expect(childDirectiveDetectorOnPush.mode).toEqual(ChangeDetectionStrategy.CheckOnce);
|
||||
});
|
||||
|
||||
if (IS_DART) {
|
||||
describe('OnPushObserve', () => {
|
||||
it('should mark OnPushObserve detectors as CheckOnce when an observable fires an event',
|
||||
fakeAsync(() => {
|
||||
var context = new TestDirective();
|
||||
context.a = createObservableModel();
|
||||
|
||||
var cd = _createWithoutHydrate('onPushObserveBinding').changeDetector;
|
||||
cd.hydrate(context, null, directives, null);
|
||||
cd.detectChanges();
|
||||
|
||||
expect(cd.mode).toEqual(ChangeDetectionStrategy.Checked);
|
||||
|
||||
context.a.pushUpdate();
|
||||
tick();
|
||||
|
||||
expect(cd.mode).toEqual(ChangeDetectionStrategy.CheckOnce);
|
||||
}));
|
||||
|
||||
it('should mark OnPushObserve detectors as CheckOnce when an observable context fires an event',
|
||||
fakeAsync(() => {
|
||||
var context = createObservableModel();
|
||||
|
||||
var cd = _createWithoutHydrate('onPushObserveComponent').changeDetector;
|
||||
cd.hydrate(context, null, directives, null);
|
||||
cd.detectChanges();
|
||||
|
||||
expect(cd.mode).toEqual(ChangeDetectionStrategy.Checked);
|
||||
|
||||
context.pushUpdate();
|
||||
tick();
|
||||
|
||||
expect(cd.mode).toEqual(ChangeDetectionStrategy.CheckOnce);
|
||||
}));
|
||||
|
||||
it('should mark OnPushObserve detectors as CheckOnce when an observable directive fires an event',
|
||||
fakeAsync(() => {
|
||||
var dir = createObservableModel();
|
||||
var directives = new TestDispatcher([dir], []);
|
||||
|
||||
var cd = _createWithoutHydrate('onPushObserveDirective').changeDetector;
|
||||
cd.hydrate(_DEFAULT_CONTEXT, null, directives, null);
|
||||
cd.detectChanges();
|
||||
|
||||
expect(cd.mode).toEqual(ChangeDetectionStrategy.Checked);
|
||||
|
||||
dir.pushUpdate();
|
||||
tick();
|
||||
|
||||
expect(cd.mode).toEqual(ChangeDetectionStrategy.CheckOnce);
|
||||
}));
|
||||
|
||||
it('should unsubscribe from an old observable when an object changes',
|
||||
fakeAsync(() => {
|
||||
var originalModel = createObservableModel();
|
||||
var context = new TestDirective();
|
||||
context.a = originalModel;
|
||||
|
||||
var cd = _createWithoutHydrate('onPushObserveBinding').changeDetector;
|
||||
cd.hydrate(context, null, directives, null);
|
||||
cd.detectChanges();
|
||||
|
||||
context.a = createObservableModel();
|
||||
cd.mode = ChangeDetectionStrategy.CheckOnce;
|
||||
cd.detectChanges();
|
||||
|
||||
// Updating this model will not reenable the detector. This model is not longer
|
||||
// used.
|
||||
originalModel.pushUpdate();
|
||||
tick();
|
||||
expect(cd.mode).toEqual(ChangeDetectionStrategy.Checked);
|
||||
}));
|
||||
|
||||
it('should unsubscribe from observables when dehydrating', fakeAsync(() => {
|
||||
var originalModel = createObservableModel();
|
||||
var context = new TestDirective();
|
||||
context.a = originalModel;
|
||||
|
||||
var cd = _createWithoutHydrate('onPushObserveBinding').changeDetector;
|
||||
cd.hydrate(context, null, directives, null);
|
||||
cd.detectChanges();
|
||||
|
||||
cd.dehydrate();
|
||||
|
||||
context.a = "not an observable model";
|
||||
cd.hydrate(context, null, directives, null);
|
||||
cd.detectChanges();
|
||||
|
||||
// Updating this model will not reenable the detector. This model is not longer
|
||||
// used.
|
||||
originalModel.pushUpdate();
|
||||
tick();
|
||||
expect(cd.mode).toEqual(ChangeDetectionStrategy.Checked);
|
||||
}));
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -1,27 +0,0 @@
|
||||
library angular.change_detection.change_detector_spec_util;
|
||||
|
||||
import 'package:observe/observe.dart' show Observable;
|
||||
import 'dart:async';
|
||||
|
||||
dynamic createObservableModel() {
|
||||
return new Entity();
|
||||
}
|
||||
|
||||
class Entity implements Observable {
|
||||
Stream changes;
|
||||
StreamController controller;
|
||||
|
||||
Entity() {
|
||||
controller = new StreamController.broadcast();
|
||||
changes = controller.stream;
|
||||
}
|
||||
|
||||
pushUpdate() {
|
||||
controller.add("new");
|
||||
}
|
||||
|
||||
bool get hasObservers => null;
|
||||
bool deliverChanges() => null;
|
||||
notifyPropertyChange(Symbol field, Object oldValue, Object newValue) => null;
|
||||
void notifyChange(record) {}
|
||||
}
|
@ -1,3 +0,0 @@
|
||||
export function createObservableModel(): any {
|
||||
return null;
|
||||
}
|
@ -802,7 +802,6 @@ var NG_CORE = [
|
||||
'ChangeDetectionStrategy#Default',
|
||||
'ChangeDetectionStrategy#Detached',
|
||||
'ChangeDetectionStrategy#OnPush',
|
||||
'ChangeDetectionStrategy#OnPushObserve',
|
||||
'ChangeDetectionStrategy#values',
|
||||
'ChangeDetectionStrategy',
|
||||
'ChangeDetectionStrategy.index',
|
||||
|
Reference in New Issue
Block a user