2017-01-23 9 views
0

アンカータグに移動してフルページをレンダリングする方法を教えてください。 私はあなたをダイレクトページにリンクするメールのリンクを作成しています。それから特定のIDに移動する必要があります。 Angularを介してIDを取得しているので、アンカーに移動する前にロードするページが必要です。 ページの読み込み後にアンカーに移動

id="{{idtoanchor}}" 

は何アイブ角度で試してみました:

app.controller('MainController', function ($scope, $http, $q, $anchorScroll, $location, $timeout) 

最初の試み:第二

$timeout(function() { 
    var currentURL = (document.URL); 
    var result = /[^/]*$/.exec(currentURL)[0]; 
    $anchorScroll('#'+'result'); 
    }); 

$timeout(function() { 
    $location.hash('id'); 
    $anchorScroll(); 
    }); 

第三の答えで提案されているように:

this.$onInit = function() { 
    var currentURL = (document.URL); 
    var result = /[^/]*$/.exec(currentURL)[0]; 
    location.hash = "#" + result; 
     }; 

これらのどれも動作しないようです。 私は$ timeoutを呼び出しても、ng-repeatがロードされる前に起動します。

答えて

0

$ timeoutは信頼できる解決策ではありません。 Angleでは、必要なデータがフェッチされた後にDOMがレンダリングされます(angleがAPIからデータを取得することを保証する約束が返されます)。したがって、DOMがレンダリングされた後にいくつかのコードを実行するには、使用可能なライフサイクルフックを角度で使用する必要があります。例:

function MyCmpController($element) { 
    var clickHandler = function() { 
     // do something 
    }; 
    this.$onInit = function() { 
     $element.on('click', clickHandler); 
     //or whatever your logic is. 
    }; 
} 
+0

これは私の状況でどのように使用しますか?私はURLを介して指定されたアンカータグに行きたいですか? –

+0

'$ onInit'フック内でスクロールするコードを書くことができます。 – souravb

+0

は動作しません。www.url.com/something#idで初めてページが読み込まれたときには起動せず、ページが再ロードされたときにのみ起動します –

関連する問題