最近ã€ãƒšãƒ¼ã‚¸å†…リンクã¨ã„ã†ã®ã¯ã‚ã¾ã‚Šä½¿ã‚れãªã„ã¨æ€ã„ã¾ã™ãŒã€ä½¿ã„ãŸã„ケースãŒã‚ã£ãŸã®ã§ã€èª¿ã¹ã¾ã—ãŸã€‚備忘メモã§ã™ã€‚
ページ内リンクã¨ã„ã†ã®ã¯ã€ãƒªãƒ³ã‚¯å…ˆã«
<a name="id001">
ã¨ã‹
<div id="id001">
ã¨ã‹æ›¸ã„ã¦ãŠã„ã¦ã€ãƒªãƒ³ã‚¯å…ƒã‚’
<a href="#id001">
ã¨ã™ã‚‹ã“ã¨ã§ã€ã“ã®ãƒªãƒ³ã‚¯ã‚’クリックã™ã‚‹ã¨ãƒªãƒ³ã‚¯å…ˆã«ã‚¹ã‚¯ãƒãƒ¼ãƒ«ã—ã¦ãれるもã®ã§ã™ã€‚
ã¨ã“ã‚ãŒã€AngularJSã§ã¯ã“れã¯ãƒ«ãƒ¼ãƒˆã¨ã¿ãªã•れã€ã”ä¸å¯§ã«#/id001
ã«å¤‰æ›ã—ã¦ã€$routeProviderã®å‡¦ç†ãŒã•れã¦ã—ã¾ã„ã¾ã™ã€‚当然ã€ãã®ã‚ˆã†ãªãƒ«ãƒ¼ãƒˆã¯ç”¨æ„ã—ã¦ã„ãªã„ã®ã§ã€äºˆæœŸã›ã¬å‹•作ã«ãªã‚Šã¾ã™ã€‚例ãˆã°ã€otherwiseã«redirectToã‚’è¨å®šã—ã¦ã„ãŸã‚Šã™ã‚‹ã¨ã€ãƒˆãƒƒãƒ—ãƒšãƒ¼ã‚¸ã«æˆ»ã‚Šã¾ã™ã€‚
ã“れã¯å›°ã£ãŸã¨ã„ã†ã“ã¨ã§ã€ã„ã‚ã„ã‚調ã¹ã¾ã—ãŸã€‚ã¯ã˜ã‚ã«è¦‹ã¤ã‘ãŸã®ãŒã“れ。
Angular JS - Scrolling To An Element By Id
AngularJSã«ã¯$anchorScroll()
ã¨ã„ã†ã®ãŒç”¨æ„ã•れã¦ã„ã¦ãã®ä½¿ã„æ–¹ãŒèª¬æ˜Žã•れã¦ã„ã¾ã™ã€‚具体的ã«ã¯ã€$rootScope
ã®$routeChangeSuccess
イベントをフックã™ã‚‹ã®ã§ã™ãŒã€è©³ã—ãã¯ã€ä¸Šè¨˜ã‚µã‚¤ãƒˆã‚’ã”覧ãã ã•ã„。
ã•ã¦ã€ã“れを試ã—ã¾ã—ãŸãŒã€ã†ã¾ãã‚りã¾ã›ã‚“ã§ã—ãŸã€‚
æ–°ã—ã„ページを表示ã—ã¦ã‚¹ã‚¯ãƒãƒ¼ãƒ«ã™ã‚‹åˆ†ã«ã¯ã„ã„ã®ã§ã™ãŒã€åŒä¸€ãƒšãƒ¼ã‚¸ã§ã‚‚リフレッシュã•れã¦ã—ã¾ã„ã¾ã™ã€‚ã¤ã¾ã‚Šã€$routeChangeSccess
イベントã¯ãƒ«ãƒ¼ãƒˆãŒæ–°ã—ããªã£ã¦ã‹ã‚‰å‘¼ã°ã‚Œã‚‹ã‚‚ã®ãªã®ã§ã™ã€‚AngularJSã®ãƒ‰ã‚ュメントをèªã‚€ã¨ã€$routeChangeStart
ã¨ã„ã†ã‚¤ãƒ™ãƒ³ãƒˆã‚‚ã‚ã‚‹ã®ã§ã™ãŒã€çµå±€ã€ãã®ã‚¤ãƒ™ãƒ³ãƒˆå‡¦ç†ã®ã‚ã¨ã«ã€ãƒ«ãƒ¼ãƒˆã‚’æ›¸ãæ›ãˆã¦ã—ã¾ã„ã¾ã—ãŸã€‚
ã•らã«èª¿ã¹ã‚‹ã¨ã€æ¬¡ã®Issueを見ã¤ã‘ã¾ã—ãŸã€‚
https://github.com/angular/angular.js/issues/1699
$location
ã®hashã‚„pathを変更ã—ã¦ã‚‚ã€ãƒ«ãƒ¼ãƒˆã‚’æ›¸ãæ›ãˆãªã„方法を用æ„ã—ã¦ã»ã—ã„ã¨ã„ã†è¦æœ›ã§ã™ã€‚ã“ã®ä¸ã«æ›¸ã„ã¦ã‚る方法ã§ã¯è§£æ±ºã—ã¾ã›ã‚“ã§ã—ãŸãŒã€æœ€å¾Œã«PRを見ã¤ã‘ã¾ã—ãŸã€‚
https://github.com/angular/angular.js/pull/2555
蛇足ã§ã™ãŒã€ã“ã®PRã¯åˆ†ã‹ã‚Šã‚„ã™ã書ã‹ã‚Œã¦ã¾ã™ãã€Basic Usageã¨ã‹ã€‚
ã§ã‚‚ã€çµå±€ã“ã®PRもリジェクトã•れã¦ã¾ã—ãŸã€‚
ã“れを許ã™ã¨ã€URLã®çŠ¶æ…‹ã¨ãƒ«ãƒ¼ãƒˆã®çŠ¶æ…‹ãŒæ•´åˆã—ãªã„ã“ã¨ãŒã§ãã¦ã—ã¾ã†ã®ã§é¿ã‘ãŸã„ãã†ã§ã™ã€‚
æ‚©ã‚“ã ã‚ã’ãã€æ¬¡ã®æ–¹æ³•ã§è§£æ±ºã—ã¾ã—ãŸã€‚
ã¾ãšã€$routeProviderを次ã®ã‚ˆã†ã«ã—ã¾ã™ã€‚
$routeProvider.when('/home', {
templateUrl: 'partials/home.html',
controller: HomeCtrl,
reloadOnSearch: false
}).
otherwise({
redirectTo: '/home'
});
ãƒã‚¤ãƒ³ãƒˆã¯ã€reloadOnSearchã§ã™ã€‚OnSearchã¨ã‚りã¾ã™ãŒã€hashã®å¤‰æ›´ã«ã‚‚有効ã®ã‚ˆã†ã§ã—ãŸã€‚
ãã®ä¸Šã§ã€
<a href="#id001">
ã®ä»£ã‚りã«ã€
<a href="#/home#id001">
ã¨ã—ã¾ã™ã€‚ã¾ã‚ãªã‚“ã¨ã‚‚æ™®é€šã®æ–¹æ³•ã§ã™ãŒã€ã“れã§ç›®çš„ã¯é”æˆã§ãã¾ã—ãŸã€‚
/home
ãŒãƒãƒ¼ãƒ‰ã‚³ãƒ¼ãƒ‰ã•れã¦ã„ã‚‹ã®ãŒæ°—ã«ãªã‚‹æ–¹ã¯ã€$location
ãŒä½¿ãˆã‚‹çжæ³ãªã‚‰ã€æ¬¡ã®ã‚ˆã†ã«ã—ã¾ã—ょã†ã€‚
'<a href="#' + $location.path() + '#id001">'
ã„ã‹ãŒã§ã—ょã†ã‹ã€‚AngularJSを使ã„ã¤ã¤ã€ãƒ¬ã‚¬ã‚·ãƒ¼ãªã“ã¨ã‚’ã‚„ã‚ã†ã¨ã™ã‚‹ã¨å¤§å¤‰ã ã€ã¨ã„ã†ä¾‹ã§ã—ãŸã€‚
ã¡ãªã¿ã«ã€hrefを使ã‚ãªãã¦è‰¯ã„ã®ãªã‚‰ã€
Angular JS - Scrolling To An Element By Id
ã®2ã¤ç›®ã®æ–¹æ³•ãŒã‚ˆã•ãã†ã§ã™ã€‚試ã—ã¦ã„ã¾ã›ã‚“ãŒã€‚