0

一部の電子メールクライアントは、明らかに%23のURLにハッシュをエンコードします(たとえば#/ path#sectionIdは#/ path%23sectionIdまたは%23/path%23sectionId)。

このようなURLにアクセスするには、別の方法で$ routeProviderを使用し、デフォルトのページにリダイレクトします。 (私は思う)

$ routeProvider.whenがそれに応じてリダイレクトする前に、どのようにURLをデコードできますか?あなたが知っているこれを回避する方法はありますか?理想的には、ページ上のセクションにスクロールするためにハッシュを使用しないこと以外のことです。

ありがとうございました。

答えて

0

これまでのところ私の主なコントローラに$場所の依存関係を追加すると$ location.hashが ''を返し、$ location.pathが '/ path#sectionId'を返します。これに基づき

、我々はコントローラの先頭に次のようなものを追加することができます。

// when has in url is encoded to %23, location.hash does not recognize it, and it gets cleared from the path in $RouteProvider 
    var holdHash = $location.path(); 
    holdHash = holdHash.split('#'); 
    if (holdHash.length > 1) { // if it has an item after the hash in the array 
     $location.hash(holdHash.pop()); //take that item and use it as a hash 
    } 

しかし、あなたは、$ location.search

に値を失うか、この操作を行うことができます:

$location.url(decodeURIComponent($location.url())) 

あなたの検索も保持しますが、 '?'を置き換えます。 '%3F'を入力して$ location.searchではなく$ location.ashに返します。

彼らはハックソリューション何とか少しあり、かつ完全に****

***** EDIT 2 SOLUTION($のlocation.searchの問題を参照)

ように動作しません。私の問題の最終的な解決策は、IDを格納しているサービスを更新し、メインコントローラのハッシュ検出の最初のことをトリガします。また、更新インクルードを念頭に格納することができるすべてのバリエーションを維持するための検出があります。

/** 
    * tries to get hash from $location 
    * if unavailable tries to look for encoded hash 
    * if unavailable returns null 
    * @return {string or null} [a string with the id of the section or null] 
    */ 
    function getHashID() { 
     var fromLoc = $location.hash(), 
     fromEncodedUrl, 
     inPath; 

     if (fromLoc.length) { 
      return fromLoc; 
     } 

     // iphone Chrome encodes the pound sign on redirect 
     fromEncodedUrl = $location.url(); 
     fromEncodedUrl = fromEncodedUrl.split('%23'); 

     if (fromEncodedUrl.length > 1) { 
      return fromEncodedUrl.pop(); 
     } 

     inPath = $location.path(); 
     inPath = inPath.split('#'); 

     if (inPath.length > 1) { 
      return inPath.pop(); 
     } 

     return null; 
    } 

私はそれ以降のサービスオブジェクトに格納されている値でアニメーションをトリガーする、または新しい値を取得し、アニメーションの後私はサービスの価値をクリアします。

関連する問題