web-dev-qa-db-ja.com

$ location.url == base(root)urlの場合、どうすればng-hideを使用できますか?

←ホームに戻るリンクを私のAngularアプリを除く)のすべてのページのナビゲーションの下に表示したいのですがホームページです。そのため、URLがアプリのホームページ(ビュー)に既に存在する場合は、条件付きでリンクを追加し、ng-hideを使用して非表示にします。

Angularの$locationサービスを使用しようとしましたが成功しませんでした

<p ng-hide="location.hash == '#/'" class="container"><a href="#topics">&larr; Back to Home</a></p>

私は次のバリエーションを試しました:

ng-hide="location.hash == '#/' " //console.log shows true
ng-hide="location.hash === '#/' " //console.log shows true
ng-hide="location.hash == '' "    //console.log shows false

ホームページでlocation.hash == '#/'の値をログに記録するとtrueが表示されるので、ng-hideが機能するはずなので困惑しています。

基本的に私はここにリストされている3番目のアプローチを試しています: 現在表示しているページ/ルートに基づいてangular ng-hideを使用するにはどうすればよいですか? しかしそうではありませんそのページの他の2つのアプローチは、私が達成しようとしていることに対して非常に複雑に見えます。

何が足りないのですか?

10

まず最初に、実際にwindow.location javascriptオブジェクトを使用しているlocation.hashまたはlocation.urlを使用する場合は、angularが提供する$ locationサービスを使用する必要があります。だからあなたのコントローラーで私は作成します:

$scope.currentPath = $location.path();

そしてあなたのhtmlで:

<div ng-hide="currentPath === '/'"></div>

「#/」と「/」に注意するのは、html5モードのみを使用しているため、$ location.pathが何を返すかはわかりませんが、console.log($ location)で簡単に確認できます。 .path())thoは、「/」のみを返すと思います。これは、角度のパスであり、#を気にする必要がないためです。

19
Adrian Neatu

Angularはlocationと呼ばれる$scope変数を探しています。これを機能させたい場合は、次のことを行う必要があります。

$scope.location = window.location

コントローラで。ただし、実際には$locationを挿入し、$scope.location = $locationを設定する必要があります。

0
dave