refactor: use properties on ngNode instead of accessor functions

Also changes directive annotations: export -> observe