問題タブ [angularjs-service]
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.
arrays - 配列の単純なプッシュ/スプライシングが機能しない - AngularJS
次のPlunkerプロジェクトをご覧ください。
複数のコントローラーがアクセスできるサービスにアイテムのリストを保持したい。この例では、姓を選択するとリストに表示されます。ただし、2 番目の名前を設定すると、リストはクリアされます。$scope.$watch のロジックがわかりません
ユーザーは、「選択してください」オプションを選択して、リストから名前を削除することもできる必要があります。次に、姓が選択されているすべてのアイテムのリストが表示されます。画像のように、以下のリストは次のようになります。
- マット・デフ
- トム・カンティ
http://plnkr.co/edit/pbeLvR?p=preview
私はまだこれを見ています。そこで何か間違ったことをしている場合に備えて、コードから抽象化する必要がありました。
data-binding - シングルページアプリ、パーマリンク、ngView?
これは私の現在の設定で、各列はコントローラーによって表されます。
さらに、各列には少しの情報 (1 つまたは複数の変数とオブジェクト) が含まれており、変更された場合、隣接する列に伝達する必要があります。
現在、ファクトリを使用して関連するコントローラに注入することで、これらの変数を共有しています。
ここで、変数値をパーマリンクしたいと思います。たとえば、次のようになります。
これにより、工場を削除することもできます。
このセットアップを達成するための最良の方法は何ですか。たとえばngView
、答えは s ですか?
javascript - AngularJS:コントローラーからサービスメソッドに値を渡す方法は?
に依存するコントローラーがありTransactionService
ます。その方法の一つが
のTransactionService
ように見えます
ご覧のとおり、このメソッドgetForMonthAndYear
は と の 2 つのパラメータに依存してmonth
おりyear
、現在は としてハードコードされていparams: {month: 5, year: 2013}
ます。このデータをコントローラーから渡すにはどうすればよいですか?
に注入しようとrootScope
しましTransactionService
たが、それは役に立ちませんでした(つまり、おそらく使用方法がわからないということです)。
また、Angular ngResource のドキュメントでは、これを実行する方法は推奨されていません。
誰かがここを案内してもらえますか?
更新
私のコントローラーは次のようになります
サービス方法を次のように変更します
私は見てconsole.log
、それは言う
angularjs - Angularjs 非同期コールバックは、$scope.$apply() の下で undefined を返します。
これは私の工場コードです。コールバックは非同期なので、$rootScope.safeApply() の下に配置します。次に、コントローラーで console.log(authService.authUser) を呼び出しますが、ユーザーがログインしたときに未定義が返されます。ただし、ユーザーがログインしていない場合は検出され、コンソールに「ログインしていません」と表示されます。何か案が?
更新しました
コントローラーで
更新 2
すべてが正常に機能するようになり、ユーザーのログイン状態を監視できるようになりました。しかし、まだ問題があります。以下のコードを確認してください
angularjs - 複数の AngularJS ディレクティブ間で共有変数を変更する
私はこのjsfiddleを作成しました:
http://jsfiddle.net/noahgoodrich/CDwfL/1/
ナビゲーション タブを管理および操作するための一連のディレクティブを作成しました。何らかの理由で、タブを閉じようとすると、最初は適切な配列要素が削除されますが、その要素は空の要素に置き換えられます。タブを開くことは期待どおりに機能するようです。
私がnavTabsService
間違ってどのように使用しているかについて、誰かが洞察を提供できますか? または、ディレクティブとディレクティブのlink()
機能に何かありますか?navTabOpen
navTabClose
unit-testing - 依存関係のある AngularJS サービスのテスト
別のサービスに依存するAngularJSの単純なサービスをテストする際にいくつかの問題があります。
サービスは次のようになります。
最初は、サービスを作成する代わりに window.location.pathname を使用しようとしましたが、それをモックできる方法が間違っているように思えました。したがって、urlService を作成しました。これは基本的に、ウィンドウ オブジェクトの単純なラッパーです。
次に、次のようなfiltersServiceTestがあります。
しかし、これはうまくいかないようです。実際に実行する前に urlServiceMock をオーバーロードすることはできません。getPathName が "test" を返すように ' ' をそれぞれ変更できbeforeEach
ますが、URL が test と等しくないシナリオをテストすることはできません。
angularjs - 新しいコントローラーの起動時に $timeout を停止する
ページ上でデータを更新し続けるために、2 秒ごとにデータをポーリングしています。私の問題は、別のページにアクセスすると、タイムアウトがアクティブのままになることです。新しいページにアクセスしたときにタイムアウトをキャンセルするにはどうすればよいですか?
//編集解決策を見つけましたが、それが良いものかどうかはわかりません。タイムアウトを $rootScope に保存すると、他のすべてのコントローラーでタイムアウトをキャンセルできます。
javascript - コントローラーとディレクティブ間のサービスの受け渡し
次のように定義された単一のサービスがあります。
このサービスは、複数のコントローラーのさまざまなディレクティブに挿入されます (一部のディレクティブには、isolate スコープがあります)。それらのうちの 1 つのみ (現時点では) で、フェッチ (および結果セット) 操作が実際に実行されますが、フェッチ操作はユーザーがクリック インタラクションによって繰り返し実行される可能性があります。
他のコントローラーは次のようにバインドします。
また
どちらの場合も、サービスの値が変更されても、変数は自動的に更新されません。
$watch
次のように設定します。
また、トリガーすることはありません (両方の場合)。
リソース コールバックの 2 つのコメント行:
mySource はその時点で としてインスタンス化されまし{}
た。これで問題は解決しませんでした。
同じオブジェクトを再利用しようとした前回の試みでした。
この制限を回避するために私が見つけた 1 つの方法は、次のように $watch を設定することです。
ただし、この機能をバックグラウンドで継続的に実行したくないので、これは心配です。(それはどのように機能しますか? その関数はどのくらいの頻度で実行されますか?$digest
そのトリガーは何回反復されますか? そのソリューションはどれほど (非) 効率的ですか?)
どうすればこれを回避できますか? 「参照によって」サービス変数にバインドするにはどうすればよいですか?
より良いアプローチがあるかもしれませんか?私はイベントを試みましたが、これらの要素のいくつかは兄弟であるため、非常に複雑なチェーンになり、子が$emit
共同の親のリスナーにイベントをキャッチさせて元に$broadcast
戻す可能性があります。
他にどのようなアプローチがありますか?
angularjs - AngularJS 関数のリサイクル
私は AngularJS を初めて使用しますが、コントローラーの範囲外で一般的に使用される関数を作成する方法を知りたいと思っていました。
たとえば、「読み込み中」のスピナーを開始するために関数を呼び出す必要があることがよくあります (RESTful 呼び出しなどの場合)。サービスとして showLoadingModal() 関数を追加しようとしましたが、それらは私が見たものからデータを取得するのに適しているようです。この関数をすべてのコントローラーに追加する必要がありますか? それとも、アプリ レベルの関数を何らかの方法で作成できますか?