@@ -203,10 +203,11 @@ function $ViewDirective( $state, $injector, $uiViewScroll) {
203203
204204 function updateView ( firstTime ) {
205205 var newScope = scope . $new ( ) ,
206- name = currentEl && currentEl . data ( '$uiViewName' ) ,
206+ name = getUiViewName ( attrs , $element . inheritedData ( '$uiView' ) ) ,
207207 previousLocals = name && $state . $current && $state . $current . locals [ name ] ;
208208
209209 if ( ! firstTime && previousLocals === latestLocals ) return ; // nothing to do
210+ latestLocals = $state . $current . locals [ name ] ;
210211
211212 var clone = $transclude ( newScope , function ( clone ) {
212213 renderer . enter ( clone , $element , function onUiViewEnter ( ) {
@@ -217,8 +218,6 @@ function $ViewDirective( $state, $injector, $uiViewScroll) {
217218 cleanupLastView ( ) ;
218219 } ) ;
219220
220- latestLocals = $state . $current . locals [ clone . data ( '$uiViewName' ) ] ;
221-
222221 currentEl = clone ;
223222 currentScope = newScope ;
224223 /**
@@ -249,16 +248,8 @@ function $ViewDirectiveFill ($compile, $controller, $state) {
249248 compile : function ( tElement ) {
250249 var initial = tElement . html ( ) ;
251250 return function ( scope , $element , attrs ) {
252- var name = attrs . uiView || attrs . name || '' ,
253- inherited = $element . inheritedData ( '$uiView' ) ;
254-
255- if ( name . indexOf ( '@' ) < 0 ) {
256- name = name + '@' + ( inherited ? inherited . state . name : '' ) ;
257- }
258-
259- $element . data ( '$uiViewName' , name ) ;
260-
261251 var current = $state . $current ,
252+ name = getUiViewName ( attrs , $element . inheritedData ( '$uiView' ) ) ,
262253 locals = current && current . locals [ name ] ;
263254
264255 if ( ! locals ) {
@@ -286,5 +277,14 @@ function $ViewDirectiveFill ($compile, $controller, $state) {
286277 } ;
287278}
288279
280+ /**
281+ * Shared ui-view code for both directives:
282+ * Given attributes and inherited $uiView data, return the view's name
283+ */
284+ function getUiViewName ( attrs , inherited ) {
285+ var name = attrs . uiView || attrs . name || '' ;
286+ return name . indexOf ( '@' ) >= 0 ? name : ( name + '@' + ( inherited ? inherited . state . name : '' ) ) ;
287+ }
288+
289289angular . module ( 'ui.router.state' ) . directive ( 'uiView' , $ViewDirective ) ;
290290angular . module ( 'ui.router.state' ) . directive ( 'uiView' , $ViewDirectiveFill ) ;
0 commit comments