しるてく

技術的な話をします

ui.routerとdecorator

書いてみたけど使うか分からないのでメモるだけメモっとく。

ui-viewのautoscrollのスクロール位置を固定する

https://github.com/angular-ui/ui-router/wiki/Quick-Reference#autoscroll

ui.routerではui-viewが切り替わった時にautoscrollって属性をつけてあげないとスクロールしてくれない。
$uiViewScrollでは、viewの要素と関係ない位置にスクロールできないので、decoratorでごにょごにょしてやる。
具体例として、ヘッダーをfixedで表示しているとautoscrollを指定したときにそのui-viewの上部にスクロールしてしまうので上のほうがヘッダーに隠れてしまうので、強制的に一番上までスクロールさせたい。

app.config ['$provide', ($provide) ->
  $provide.decorator '$uiViewScroll', () ->
    (uiViewElement) ->window.scrollTo(0, 0)
]

$state.goのreloadを常にtrueにしてやる

同じstateに移動できないのやだなーみたいなとき。

app.config ['$provide', ($provide) ->
  $provide.decorator '$state', ($delegate) ->
    state = $delegate
    state.superGo = state.go
    state.go = (to, params, options) ->
      options = options || {}
      if angular.isUndefined options.reload
        options.reload = true
      this.superGo(to, params, options)

    return $delegate
]