2017-01-23 7 views
0

Wie würde man die gesamte Seite rendern und dann zum Anker-Tag gehen? Ich mache einen Link in einer E-Mail, die Sie mit der direkten Seite verbindet, und dann muss es auf die spezifische ID gehen. Ich bekomme die ID über Angular, also muss ich die Seite laden, bevor sie versucht, zum Anker zu gehen.gehen Sie nach dem Laden der Seite zu verankern

id="{{idtoanchor}}" 

was ive versucht, mit Winkel:

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

Erster Versuch:

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

Zweitens:

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

Dritten wie in Antwort vorgeschlagen:

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

Ich kann nicht scheinen, von diesen zu arbeiten Selbst wenn ich das $ timeout anrufe, feuert es, bevor die ng-Wiederholung getan wird, lade.

Antwort

0

$ Timeout ist keine zuverlässige Lösung. In eckigen DOM wird gerendert, nachdem die erforderlichen Daten abgerufen werden (eine Zusage wird zurückgegeben, die sicherstellt, dass angular die Daten von der API erhält). Um Code nach dem Rendern des DOMs auszuführen, müssen Sie die verfügbaren Lifecycle-Hooks in angular verwenden. Zum Beispiel:

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

Wie würde ich das in meiner Situation verwenden? Wann möchte ich über die URL zum angegebenen Anchor-Tag gehen? –

+0

Sie können den Code zum Scrollen innerhalb des '$ onInit'-Hooks schreiben. – souravb

+0

funktioniert nicht, es wird nicht beim ersten Mal ausgelöst, wenn die Seite über www.url.com/something#id geladen wird. Wird nur ausgelöst, wenn die Seite neu geladen wird. –

Verwandte Themen