@@ -203,10 +203,11 @@ function $ViewDirective( $state, $injector, $uiViewScroll) {
203
203
204
204
function updateView ( firstTime ) {
205
205
var newScope = scope . $new ( ) ,
206
- name = currentEl && currentEl . data ( '$uiViewName' ) ,
206
+ name = getUiViewName ( attrs , $element . inheritedData ( '$uiView' ) ) ,
207
207
previousLocals = name && $state . $current && $state . $current . locals [ name ] ;
208
208
209
209
if ( ! firstTime && previousLocals === latestLocals ) return ; // nothing to do
210
+ latestLocals = $state . $current . locals [ name ] ;
210
211
211
212
var clone = $transclude ( newScope , function ( clone ) {
212
213
renderer . enter ( clone , $element , function onUiViewEnter ( ) {
@@ -217,8 +218,6 @@ function $ViewDirective( $state, $injector, $uiViewScroll) {
217
218
cleanupLastView ( ) ;
218
219
} ) ;
219
220
220
- latestLocals = $state . $current . locals [ clone . data ( '$uiViewName' ) ] ;
221
-
222
221
currentEl = clone ;
223
222
currentScope = newScope ;
224
223
/**
@@ -249,16 +248,8 @@ function $ViewDirectiveFill ($compile, $controller, $state) {
249
248
compile : function ( tElement ) {
250
249
var initial = tElement . html ( ) ;
251
250
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
-
261
251
var current = $state . $current ,
252
+ name = getUiViewName ( attrs , $element . inheritedData ( '$uiView' ) ) ,
262
253
locals = current && current . locals [ name ] ;
263
254
264
255
if ( ! locals ) {
@@ -286,5 +277,14 @@ function $ViewDirectiveFill ($compile, $controller, $state) {
286
277
} ;
287
278
}
288
279
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
+
289
289
angular . module ( 'ui.router.state' ) . directive ( 'uiView' , $ViewDirective ) ;
290
290
angular . module ( 'ui.router.state' ) . directive ( 'uiView' , $ViewDirectiveFill ) ;
0 commit comments