@@ -11,7 +11,7 @@ import {ElementRef, TemplateRef, ViewContainerRef} from '@angular/core';
1111
1212import { EventEmitter } from '../..' ;
1313import { QUERY_READ_CONTAINER_REF , QUERY_READ_ELEMENT_REF , QUERY_READ_FROM_NODE , QUERY_READ_TEMPLATE_REF , getOrCreateNodeInjectorForNode , getOrCreateTemplateRef } from '../../src/render3/di' ;
14- import { AttributeMarker , QueryList , defineComponent , defineDirective , detectChanges , injectViewContainerRef } from '../../src/render3/index' ;
14+ import { AttributeMarker , QueryList , defineComponent , defineDirective , detectChanges , injectTemplateRef , injectViewContainerRef } from '../../src/render3/index' ;
1515import { bind , container , containerRefreshEnd , containerRefreshStart , element , elementContainerEnd , elementContainerStart , elementEnd , elementProperty , elementStart , embeddedViewEnd , embeddedViewStart , load , loadDirective , loadElement , loadQueryList , registerContentQuery } from '../../src/render3/instructions' ;
1616import { RenderFlags } from '../../src/render3/interfaces/definition' ;
1717import { query , queryRefresh } from '../../src/render3/query' ;
@@ -1780,6 +1780,52 @@ describe('query', () => {
17801780 } ) ;
17811781 } ) ;
17821782
1783+ it ( 'should restore queries if view changes' , ( ) => {
1784+ class SomeDir {
1785+ constructor ( public vcr : ViewContainerRef , public temp : TemplateRef < any > ) {
1786+ this . vcr . createEmbeddedView ( this . temp ) ;
1787+ }
1788+
1789+ static ngDirectiveDef = defineDirective ( {
1790+ type : SomeDir ,
1791+ selectors : [ [ '' , 'someDir' , '' ] ] ,
1792+ factory : ( ) => new SomeDir ( injectViewContainerRef ( ) , injectTemplateRef ( ) )
1793+ } ) ;
1794+ }
1795+
1796+ function template ( rf : RenderFlags , ctx : any ) {
1797+ if ( rf & RenderFlags . Create ) {
1798+ element ( 0 , 'div' ) ;
1799+ }
1800+ }
1801+
1802+ /**
1803+ * <div *someDir></div>
1804+ * <div #foo></div>
1805+ */
1806+ const AppComponent = createComponent (
1807+ 'app' ,
1808+ function ( rf : RenderFlags , ctx : any ) {
1809+ if ( rf & RenderFlags . Create ) {
1810+ container ( 1 , template , null , [ AttributeMarker . SelectOnly , 'someDir' ] ) ;
1811+ element ( 2 , 'div' , null , [ 'foo' , '' ] ) ;
1812+ }
1813+ } ,
1814+ [ SomeDir ] , [ ] ,
1815+ function ( rf : RenderFlags , ctx : any ) {
1816+ if ( rf & RenderFlags . Create ) {
1817+ query ( 0 , [ 'foo' ] , true , QUERY_READ_FROM_NODE ) ;
1818+ }
1819+ if ( rf & RenderFlags . Update ) {
1820+ let tmp : any ;
1821+ queryRefresh ( tmp = load < QueryList < any > > ( 0 ) ) && ( ctx . query = tmp as QueryList < any > ) ;
1822+ }
1823+ } ) ;
1824+
1825+ const fixture = new ComponentFixture ( AppComponent ) ;
1826+ expect ( fixture . component . query . length ) . toBe ( 1 ) ;
1827+ } ) ;
1828+
17831829 describe ( 'content' , ( ) => {
17841830 let withContentInstance : WithContentDirective | null ;
17851831 let shallowCompInstance : ShallowComp | null ;
0 commit comments