anchor.diff:      _childComponent = null;
     }
   
  -  void _checkAndInitialize() {
  -    _disposeChildComponent();
  -    if (_viewContainerRef != null) {
  -      _initialize();
  -    } else {
  -      _loadDeferred = true;
  -    }
  +  /// The type of component to dynamically render.
  +  @Deprecated('Use componentFactory instead as it is more tree-shakable')
  +  @Input()
  +  set componentType(Type dartType) {
  +    if (_componentType != dartType) _typeChanged = true;
  +    _componentType = dartType;
     }
   
     /// The type of component to dynamically render.
  -  ///
  -  /// If something other than a null or Type is passed in, it will
  -  /// be ignored.
  -  @Deprecated('Use componentFactory instead as it is more tree-shakable')
     @Input()
  -  set componentType(Object dartType) {
  -    // Ignore unsupported type.
  -    if (dartType == null) {
  -      _disposeChildComponent();
  -    } else if (dartType is Type) {
  -      _componentFactory = null;
  -      _componentType = dartType;
  -      _checkAndInitialize();
  -    }
  +  set componentFactory(ComponentFactory component) {
  +    if (_componentFactory != component) _factoryChanged = true;
  +    _componentFactory = component;
     }
   
  -  /// The ComponentFactory of component to dynamically render.
  -  ///
  -  /// If something other than a null or ComponentFactory is passed in, it will
  -  /// be ignored. Note: This only temporarially supports Object to allow for
  -  /// an easier transition of code. This does make this code slightly slower,
  -  /// but will be changed to [ComponentFactory] when [componentType] is
  -  /// removed.
  +  /// The value to set on the component if the component implements
  +  /// [RendersValue]. Optional.
     @Input()
  -  set componentFactory(Object component) {
  -    if (component == null) {
  +  set value(dynamic s) {
  +    _value = s;
  +    _valueChanged = true;
  +  }
  +
  +  @override
  +  void ngAfterChanges() {
  +    if (_factoryChanged || _typeChanged) {
         _disposeChildComponent();
  -    } else if (component is ComponentFactory) {
  -      _componentType = null;
  -      _componentFactory = component;
  -      _checkAndInitialize();
  +      if (_viewContainerRef != null) {
  +        _initialize();
  +      } else {
  +        _loadDeferred = true;
  +      }
  +    } else if (_valueChanged) {
  +      // Only update the child if the component was not changed. If the
  +      // component was changed then it will get initialized with the value.
  +      _updateChildComponent();
       }
  +    _valueChanged = _factoryChanged = _typeChanged = false;
     }
   
     void _initialize() {
  
positive.code: 
    ComponentRef _childComponent;
    Type _componentType;
    ComponentFactory _componentFactory;
    Object _value;
  
    /// Fired when component is loaded allowing clients to get a handle on the
    /// component loaded.
  
negative.code:           _componentFactory, _viewContainerRef);
        _onLoadController.add(_childComponent);
        _updateChildComponent();
      } else if (_componentType != null) {
        // TODO(google): Remove this code once componentType is no longer used.
        Type loadType = _componentType;
        _slowComponentLoader
  