@@ -45,19 +45,21 @@ function branchDirective($parse, $document, $mdUtil, $filter, $$mdTree) {
4545      var  isFilterOpen  =  false ; 
4646      if  ( isOpen )  {  startWatching ( ) ;  } 
4747
48+ 
4849      scope . $mdBranchFilter  =  function  ( value )  { 
49-         if  ( value  &&  value . length  >  2 )  { 
50+         var  filtered  =  $filter ( 'filter' ) ( value ) ; 
51+         if  ( filtered  &&  filtered . length  >  2 )  { 
5052          isFilterOpen  =  true ; 
5153          blocks . forEach ( function  ( block )  { 
5254            $$mdTree . filterOpen ( block ) ; 
5355          } ) ; 
54-         }  else  if  ( ( ! value  ||  value . length  <  3 )  &&  isFilterOpen )  { 
56+         }  else  if  ( ( ! filtered  ||  filtered . length  <  3 )  &&  isFilterOpen )  { 
5557          isFilterOpen  =  false ; 
5658          blocks . forEach ( function  ( block )  { 
5759            $$mdTree . filterClose ( block ) ; 
5860          } ) ; 
5961        } 
60-         return  $filter ( 'filter' ) ( value ) ; 
62+         return  filtered ; 
6163      } 
6264
6365
@@ -206,14 +208,27 @@ function branchDirective($parse, $document, $mdUtil, $filter, $$mdTree) {
206208        items [ index ] . $$depth  =  $scope . $depth ; 
207209      } 
208210
211+ 
212+       // upate open state 
213+       // disconnect/reconnect scopes 
214+       // start watching for open items 
209215      function  updateState ( $scope ,  index )  { 
210216        var  item  =  items  ? items [ index ]  : undefined ; 
211217        var  element  =  $scope . $element  &&  $scope . $element [ 0 ]  ? $scope . $element  : undefined ; 
218+ 
219+         // reconnect all scopes 
220+         $mdUtil . reconnectScope ( $scope ) ; 
221+         element . toggleClass ( 'md-open' ,  item . $$isOpen ) ; 
222+ 
223+         // wait till next digest to change state so we do not get into an ifinite loop 
212224        $mdUtil . nextTick ( function  ( )  { 
213-           element . toggleClass ( 'md- open' ,   item . $$isOpen ) ; 
225+           // if  open then watch the data 
214226          if  ( item . $$isOpen )  { 
215-             $mdUtil . reconnectScope ( $scope ) ; 
216227            $scope . startWatching ( ) ; 
228+ 
229+           // sconnect scopes that are closed 
230+           }  else  { 
231+             $mdUtil . disconnectScope ( $scope ) ; 
217232          } 
218233        } ) ; 
219234      } 
0 commit comments