問題タブ [angularjs-digest]

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 に答える
1377 参照

javascript - 内部ディレクティブから ng-model を変更できません

ng-model親htmlタグから変更するディレクティブを作成しようとしていますが、機能していません:

これは私の見解です:

ng-repeat の有無にかかわらず、内部ディレクティブから親 ng-model を更新するにはどうすればよいですか。

フィドルを作成しました

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

javascript - コントローラからのファクトリ変数の監視

簡略化されたコード:

アプリを実行すると、コントローラーの更新トリガーがfoo.bar正常に 1 に更新され、{{}} モデルのオブザーバーがそれに応じて html を更新します。しかし、マウスをクリックすることでファクトリ自体が更新され、更新機能とまったく同じことが行われ、変更は HTML に表示されません。
コントローラーで追加のスコープを使用しようとしても失敗しました。それはなぜですか、またどのように変化を観察するのですか?

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

angularjs - サーバーの応答後にバインディングを更新する / バインディングを選択的に更新するにはどうすればよいですか?

モデルの値がフォームで更新されないようにしようとしています。

例えば ​​:

ユーザーの保存された情報 (名前、住所など) をリストする支払い詳細フォームと、同じ情報を編集するために使用されるフォームがあります。

入力コントロールが変更されたときに表示される情報を変更したくないため、 :: を使用して1回限りのバインディングを実験してきました(ただし、モデルの値を更新して、処理のためにサーバーに送信できるようにしたいのは明らかです)。

サーバーが変更が保存された、問題ないなどの応答をした後、表示されているモデル値を更新するにはどうすればよいですか? ワンタイムバインディングを更新する方法が見つからないようです(これは完全に意図された機能であると推測しています)。

したがって、私の質問は次のようになります。

一部のコントロールのバインドを選択的に更新し、他のコントロールを更新しないようにするにはどうすればよいですか?

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

angularjs - AngularJS - ng-if はダイジェスト ループを実行します

ビューの読み込み時に無限ループの問題に直面しています。データは、コントローラーで ngResource を使用して API 呼び出しからロードされます。ビューを正しくレンダリングする前に、ビューが複数回リロードされているようです。スコープ メソッドを呼び出すテンプレートで ng ディレクティブを使用すると、これがループに陥り、ビューが再レンダリングされるようです。

これが私のコントローラーです

そして、これが私のテンプレートです

showText関数が呼び出された回数をログに記録しようとしたときのコンソールウィンドウの出力は次のとおりです。

コンソール出力

ngResource 呼び出しの実際の結果には、配列に 9 つの項目しかありませんが、9 回以上ループし、複数のループも発生します。これはしばらくの間発生し、停止します。誰かがそれを修正する際に正しい方向に向けてください。

ありがとうございました

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

javascript - angular.js keypress ディレクティブ イベントが不思議なことに起動しない

この例に従って、AngularJSでEnterキーを押してフォームを送信します

しかし、私はそれを機能させることができません。それは完全に不可解です。keypress イベントがディレクティブによってトラップされないのはなぜですか?

http://plnkr.co/edit/A9oio2F61yHssE49aiCb?p=preview

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

javascript - $scope.$watch ディレクティブによって変更された値をキャッチしない

私のディレクティブはスパンにフォーカスを与え、boolean値を割り当てます。つまり、shifttab を押すたびに focusToSpan を true に割り当てますが、この変更はコントローラーテンプレートに反映されません。以下のように focusToSpan 変数の $scope.$watch でチェックしました

指令

コントローラ

ディレクティブでコントローラー変数に加​​えられた変更が、コントローラーとテンプレートにどのように反映されるかを知っていますか。ありがとう、バラジ。

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

angularjs - typescript を使用した then() angularjs に対する sucess() のダイジェスト エラー

typescript で angular js サービスを作成して file を投稿しました。成功alert()すると、ユーザーに通知するために使用しました。

コードをデバッグして、呼び出しが実際に成功したことを確認できますが、呼び出しが返されると、成功が表示され、ダイジェスト エラーが表示されますが、サービスとコントローラーの使用から約束を返すだけで、then()正常に動作します。

私は何が問題なのかを知りたかったのですがsuccess()、 ifthen()は常に優先されるべきsuccess()です。

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

javascript - Angular Digest Cycle が呼び出されないのはなぜですか?

2 つのコントローラーと 1 つの工場があります。ファクトリとコントローラーをメインコントローラーに挿入しています。以下のコードスニペットは次のとおりです。

工場:

TallyFactory を受け入れる TallyController:

TallyFactory を受け入れ、TallyFactory オブジェクトの値を変更する MainController:

私の TallyController (2 番目のスニペット) に注目してください。$scope にウォッチャーを追加し、「スコア」がいつ変化するかをリッスンしています。

MainController から "addTally" 関数を ng-click で実行すると、Factory オブジェクト (TallyFactory) の値が変更されます。変更があり、特に TallyController ($scope.scores) にウォッチャーを作成したので、ダイジェスト サイクルがトリガーされ、コンソールが TallyFactory の新しい値で更新されるべきではありませんか?

また、私の TallyController は MainController にネストされておらず、互いに分離されています (それが問題かどうかは 100% わかりません)。

TallyFactory が値を変更したため、ダイジェスト ループがトリガーされない理由がわかりません。

0 投票する
4 に答える
623 参照

javascript - console.log が 1 回だけログに記録されるはずなのに、複数回ログに記録される理由

私は本を​​読んでいて、ng-classでこの例The Complete Book on AngularJS, Ari Lernerを見つけました。関数内に console.log を 1 つ追加しました。一度だけログに記録されていることがわかります。generateNumber()

xその後、使用されている場所をgenerateNumber()関数呼び出しに置き換えました。私の変更後、私のコードは次のようになります

HTML

JS

そのため、何度もログに記録された理由を理解できずconsole.log()、ボタンをクリックしても、一度しかログに記録されていないはずですが、複数回ログに記録されました。なぜそのメソッドが何度も呼び出されるのか理解できません。また、この例外が発生することもあります(上の2行だけを貼り付けました)

この $digest は何のためですか? そして限界に達した理由。ウォッチャーとは?ロギングが何度も行われる理由を教えてください。君たちありがとう、

編集

返信ありがとうございますng-class="{red: generateNumber() > 5}"。誰かが私にこれを説明できますか。そこでは使いたくない$scope.xので、今は無視してください。

君たちありがとう、

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

javascript - $rootScope.$emit() と ng-show を D3 クリック イベント経由で連携させるにはどうすればよいですか?

D3 svg イメージを angular ディレクティブでラップしています。ユーザーがその D3 イメージをクリックすると、コントローラーで変数を true に設定して、ng-show が別の D3 イメージを表示するようにします。

私が行ったことは.on("click")、D3 イメージに関数を追加し、その関数を使用$rootScope.$emit()してイベントを送信することです。2 番目のイメージのコントローラーでは$rootScope.$on()、イベントを取得し、ng-show の変数を true に設定する必要があります。

このアプローチは機能しません。コードをテストして、イベントが適切に発行およびキャッチされていることを確認しましたが、ng-show は 2 番目の D3 イメージを表示しません。

どうしてこれなの?

私がやろうとしていることを説明するために、小さな plunkr を作成しました。 http://plnkr.co/edit/FnqeAF9kVXxdUdOzT5to .

コントローラーのコードは次のとおりです。