問題タブ [angularjs-scope]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1017 参照

rest - AngularJS コントローラー/サービス/http 通信

コントローラーに挿入される AnguarJS サービスに REST API をラップしました。かなり標準的ですよね。ここで、そのサービスが 401 応答をインターセプトし、何らかの方法でログアウトまたは再ログイン プロンプトなどをトリガーするようにしたいと考えています。問題は、そのサービスがどのスコープにもアクセスできないことです。そのエラーをブロードキャストする最良の方法は何ですか? 私はいくつかのアイデアを思いつきましたが、私はAngularが初めてで、誰かがこれを行う「Angular」の方法を教えてくれるかどうか疑問に思っていますか?

1) サービスを、AppCtrl がリッスンできるイベント プールとして機能させることができます。しかし、これは少し複雑すぎるようです。そう:

2) $rootScope をサービスに挿入し、サービスをisLoggedIn直接変更できます。しかし、これは明らかに間違っているようです。サービスがデータを処理し、コントローラーがスコープを制御し、ディレクティブが dom をいじる場所を明確に区別したいと思います。

3) 私のすべてのコントローラーは、拒否された promise を監視し、その理由が 401 エラーである場合は、$scope に到達しisLoggedInて false に設定することができますが、このオプションは明らかに最悪です。

何か助けはありますか?

ありがとう。

0 投票する
1 に答える
3139 参照

javascript - モデルが変更されたときに角度ビュー (DOM 要素) が更新されない

最新の安定した Chrome で Angular の最新の安定したバージョンを実行します。ng コントローラー A を持つビュー内にある DOM 要素で ng-click がありますが、DOM 要素自体には別のコントローラー B に設定された ng-controller があります。コントローラー B 内で ng-click が発生しますが、スコーププロパティが変更されますng-model 属性によってバインドされている DOM 要素は反映されません。

具体的には、テキストエリアと他の HTML5 入力タイプがあります。エラーはありません。デバッガーを中断すると、スコープ変数を見て、$scope が実際にコントローラー B を指していることを確認できます。

ここの Plnkr の例では、同じ DIV 内にある入力のみを更新する方法に注意してください: http://plnkr.co/edit/DmccNj?p=preview

0 投票する
1 に答える
6593 参照

javascript - エラー: コントローラーがありません: ngModel

ng-change="reverseOrder=this.checked"チェックボックスに追加すると、次のようになります。

次の例外が発生します。

ng-modelビュー全体とタグをラップする div を入力ボックスに追加しようとしましたが<html>、これにより次のような例外が発生します。

何が起きてる?モデルを明示的に取り込む必要があるとは思いませんでした。私はAngularのドキュメントを読みましたが、賢明ではありません。

前もって感謝します。

デイブ

0 投票する
3 に答える
3623 参照

angularjs - ディレクティブでは、$watch が 2 回起動し、newValue を元の $watch 起動前の値に戻します。

angularの経験がほとんどないため、何か間違ったことをしていると確信しています。おそらく答えはすでにstackoverflowのどこかにあり、私は正しい質問をしていません(グーグル)。

私はこの非常に単純なディレクティブを持っています。スパンをクリックするたびに変更したいのは、4 つの状態を持つ単なるスパンです。クリックするたびに、状態が順方向に進み、ループバックします。州ごとに異なる CSS クラスがあります。ディレクティブの値が変更されるたびに、親モデルで値を変更したい (したがって、isolate スコープ宣言の "=" ですよね?)。

クラスを変更する値にウォッチを付けて、値が変更されるたびに css クラスが更新されるようにします。

さて、問題は、クリックするとウォッチが newValue で起動されますが、その後、クリック前の値に等しい newValue でウォッチが再び起動することです。

これは、親コントローラーのダーティチェックとモデルへの接続に関係していると思いますが、これを行う正しい角度の方法は何ですか? および/または同じ結果を得るためのより良い、より角度のある方法はありますか?

ここでディレクティブ:

こちら>>フィドル<<

0 投票する
1 に答える
1028 参照

javascript - 初回ロード時に AngularJS モデルを選択するには?

AngularJS を使用して、選択オプション リストを作成しています。

フィールド isMandatory に応じて、デフォルトでオプションを選択しています。しかし問題は、初回ロード時に選択したアイテムの ID を取得できないことです。

オプションを変更すると動作します。

このプランカー コードを確認してください: http://plnkr.co/edit/U2dVeo1vwZZPFKVhPleV?p=preview

0 投票する
2 に答える
4907 参照

angularjs - 'transcluded' ディレクティブで $$prevSibling を使用してスコープ データにアクセスしても問題ありませんか?

私のディレクティブの設定は次のとおりです。

  • 確実directiveBにレンダリングされるように、トランスクルージョンを使用しています。
  • directiveAチェックするたびに値を変更するためのチェックボックスがあります。
  • directiveAこの値はとdirectiveBのスコープでアクセスできる必要があります。

私はこれを行うことができましたが、参照することによってのみ$$prevSibling- より良い方法はありますか?

コードは次のとおりです: http://jsfiddle.net/janeklb/yugQf/ (このサンプルでは、​​チェックボックスをクリックすることは単に値を「クリア」することを意味します)

--

もう少し深く: directiveA(そこにトランスクルージョンされているもの) の「内容」は常にdirectiveB. 他のdirectiveB-like ディレクティブもそこに行き着きます。「directiveBタイプ」は常に 内で使用されますdirectiveA

0 投票する
2 に答える
1441 参照

angularjs - Angular JS: ビューのルックフィールが同じ場合、ng-repeat を使用して繰り返される各ビューから異なる UI コンポーネントを処理する

大きなタイトルで申し訳ありません。これ以上のものは思いつきませんでした。私が抱えている問題を説明しましょう。

それぞれが同じルック フィールを共有する 3 つのカードをレンダリングする必要があります。つまり、それぞれにヘッダー セクションとボディ セクションがあります。モデルからデータを取得し、これらのカードをレンダリングするために ng-repeat を使用しています。

コード:

これで、これらのカードの各ボディに異なる UI が含まれているはずです。たとえば、あるカードの本体には Hight Charts を使用したチャートが含まれている場合があり、別のカードの本体には jQuery UI ライブラリの UI を使用したいだけの場合などがあります。

ng-repeat を使用してループしているときに、どうすればそれを達成できますか? 私の開始方向が正しいかどうか教えてください。

モデル データは次のようになります。

カード3枚のお申し込み

これに関するヘルプを探しています。

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

0 投票する
1 に答える
13042 参照

javascript - angularディレクティブ内の親から継承する新しいスコープ

私がこれをするとします:

このディレクティブのスコープに親スコープから変数を継承させながら、それを「分離」スコープにする方法を教えてください。

たとえば、角度ドキュメントから:

= または =attr - attr 属性の値によって定義された name のローカル スコープ プロパティと親スコープ プロパティとの間の双方向バインディングを設定します。属性名が指定されていない場合、属性名はローカル名と同じであると見なされます。スコープのウィジェット定義: { localModel:'=myAttr' } を指定すると、ウィジェット スコープ プロパティ localModel は、親スコープの parentModel の値を反映します。parentModel への変更は localModel に反映され、localModel の変更は parentModel に反映されます。

ただし、その場合、「localModelの変更はparentModelに反映される」ため、そのディレクティブのスコープ内の変数を変更してからscope.apply()を実行すると、それに応じて親スコープと親テンプレートに反映されます変更で更新されます

また、パラメーターとして "scope : true" を実行しようとしましたが、スコープが変更され、その後に scope.$apply(); が続きます。元のスコープにも伝播します...

親スコープからスコープをコピーしても、そのスコープ内の変数の変更が親スコープに反映されないようにする方法はありますか?