2017-09-18 7 views
0

を振る舞うことがAngularJSは、次のシナリオに狂っ反応しているように思える:私は別のコントローラからのルートを提供すると、すべてが右の働きAngularJS - NG-場合とNGショー/ NG-隠すクレイジー

とテンプレート右に示されています。しかし、ng-ifおよびng-show/ng-hideブロックが正しく動作していないため、ブラウザで同じルート(!)をリロードした後、テンプレートはクレイジーに動作します。テンプレートは、URLからの変数(AngularJSを介して取得)と関連しています。

何が問題なのですか?私のコントローラで

$scope.excel = $location.search().excel; 

私は(にconsole.logを経由して、これをチェックし)、それは偽です。しかし、私のテンプレートは正しく動作しません。私は=== trueから= trueまでのすべてを疲れました。

<div class="row" ng-hide="loading" ng-show="!excel && !tooMuchData"> 
+7

ここで起きていることを理解するのは難しいです – Daniella

+0

なぜ同じ要素に 'ng-hide'と' ng-show'が必要ですか? – Pytth

+1

同じ要素に対してng-hideとng-showを使用しないでください。どちらか一方を選択してください。例えば、 'ng-show ="!loading &&!excel &&!tooMuchData "' –

答えて

0

問題を紹介するコードやPlunkerを提供することは有益です。

ここで私はあなたが提供まばらな情報に基づいつもり推測しています:

どういうわけかそのビューのコントローラの状態は、あなたがどこから来たかに入ってくるとき、実際に何かがコントローラに渡されたものの状態からして影響を受けていますその状態。ここで

はこれが起こるかもしれない方法の例のカップルです:あなたが状態を変更したときに

  1. 何かがコントローラに渡されました。ポルノの動画をカテゴリに分類してリストアップするとします(/ポルノ)。特定のカテゴリ(MILFなど)を選択すると、新しいビューを開きます(新しい状態を入力し、そのカテゴリのIDを渡します)。今、ルートは/ porn/MILFです。そして、あなたはビデオをリストアップします。このセクションのすべての動画は、以前の状態からルータ経由で渡されたIDのカテゴリから取得されました。あなたがデフォルトを設定していない場合、IDが不明になり、データutからのフィルタ不明がファンキーになることがあります。

  2. コントローラは、リフレッシュ時にリセットされる$ rootScopeの一部のプロパティに依存します。上記の例と同じですが、あなたが言ったカテゴリを選んだところです。

$ rootScope.pickedCategory = 'MILF'

あなたは今それをあなたのコントローラで何かをしようとするが、それは今では不明です。 rootscopeの乱用は、このように一般的に中止するべきです。

EDIT:同じオブジェクトにng-showとng-hideというコードを提供したことは、ひどい考えであり、おそらく問題の原因になっています。

どちらも同じ要素にないものを使用してください。

あなたは常に条件のために、このルールを使用することができます:あなたは本当のことをしたい

条件 - Aとあなたが偽であることをしたい条件付ける - B

はに等しい:あなたがあることをしたい

条件あなたはfalseになりたい真& &!B

または

条件B & &!

0

ng-hideng-showの両方を同じdivに使用しているのはなぜですか? ng-hideはng-showの逆であり、逆も同様です。どちらも設定するのはdisplay: nonedisplay: blockです。また、loadingパラメータについては言及しません。

ng-show!loadingとのみ使用してください。 例:ng-show= "!excel && !tooMuchData && !loading"

+0

ng-if、ng-show、ng-hideについて話しても、同じDOM要素でそれらを使うわけではありません! – supereschek