How [class] [attr] [style] directives work

前端 未结 3 1009
小蘑菇
小蘑菇 2020-12-17 02:58

I examined ngStyle, ngClass directives here but I still couldn\'t understand how these work:

3条回答
  •  不知归路
    2020-12-17 03:26

    You're right, these are not directives.

    Angular compiler creates a view factory for each component with view nodes. For each view node the compiler defines a set of bindings types using the bitmask. There are different binding types and hence different types of operations performed during change detection to reflect changes in the component class.

    You probably know about the standard input mechanism that allows updating the property:

    The compiler creates the TypeProperty binding for it:

    TypeProperty = 1 << 3
    

    and hence the operation to update the element property is used during change detection.

    The special syntax attr.*, class.* and style.* defines different type of bindings:

    TypeElementAttribute = 1 << 0,
    TypeElementClass = 1 << 1,
    TypeElementStyle = 1 << 2,
    

    so during change detection for each type of binding corresponding operation is used:

    function CheckAndUpdateElement() {
        ...
        case BindingFlags.TypeElementAttribute -> setElementAttribute
        case BindingFlags.TypeElementClass     -> setElementClass
        case BindingFlags.TypeElementStyle     -> setElementStyle
        case BindingFlags.TypeProperty         -> setElementProperty;
    

    To learn about Angular internals related to view and bindings I strongly recommend reading:

    • The mechanics of DOM updates in Angular
    • The mechanics of property bindings update in Angular
    • Here is why you will not find components inside Angular

    Since all bindings are processed during change detection also read:

    • Everything you need to know about change detection in Angular

提交回复
热议问题