私はangularjsを初めて使っているので質問があります。私はたくさんの検索をしましたが、その概念を理解できませんでした。 1つのビューに対して1つのコントローラが必要であるという基本的な考え方がありますが、1つのビューに対して複数のコントローラを持つことができます。私は1つのビューで2つ以下のコントローラを持っていますが、私は両方のコントローラで使用しなければならないaddComma関数を例に挙げてみましょうが、私はそれをすべてのコントローラ間で再利用できるように書きたいと思います。同じビュー。ですから、基本的には、同じビューまたは他のビューのすべてのコントローラ間で、コントローラのグローバルな機能をどのようにしてアプリケーションのどこにでも使用できるようにする方法です。私がanglejsの概念を理解するのは苦労しています。angularjsの2つ以上のコントローラ間で再利用可能な関数を作成する方法
app.controller("GetChargesController", function ($scope, GetService, $rootScope) {
$scope.Title = "Charges Details List";
$rootScope.loading = true;
// Calling Serivce Method here
$scope.GetChargesDetails = GetService.GetAll("CommonApi", "GetChargesDetails").then(function (d) {
$scope.ChargesDetails = d;
$rootScope.loading = false;
});
// add comman function goes here
$scope.addComma = function(x) {
return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
});
app.controller("GetPaymentsController", function ($scope, GetService, $rootScope) {
$scope.Title = "Payments Details List";
$rootScope.loading = true;
// Calling Serivce Method here
$scope.GetPaymentsDetails = GetService.GetAll("CommonApi", "GetPaymentsDetails").then(function (d) {
$scope.PaymentsDetails = d;
$rootScope.loading = false;
});
// add comman function goes here
$scope.addComma = function (x) {
return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
});
以下は、(asp.net web apiを使用して)データベースから任意の種類のデータを取得するために作成した汎用サービスです。私が読んだように、角度サービスはデータを保持することができ、リンク上を前後に移動しているときにデータベースを何度も呼び出す必要はありません。たとえば、ページにこれらの3つのリンクがあるとします。ホームリンク、PaymentChargesリンク、注文リンク。ホームビューはデフォルトで開きます。そしてPaymentCharges Linkをクリックすると、データベースからデータが取得され、そのビューがレンダリングされますが、ホームリンクをクリックすると、データベースへのコールはホームページのデータを取得する必要がありません。 PaymentChargesデータベースに行く呼び出しがなければならない2番目の時間をリンクするが、私はファンクバグのコンソールオプションでそれを呼び出すと、データを取得するためにデータベースに行くオプションを参照してください。私たちはキャッシュを使用して、データベースへの呼び出し。
app.factory("GetService", function ($http) {
var thisService = {};
// get all data from database
thisService.GetAll = function (controllername, methodName) {
var promise = $http({
method: 'GET',
url: '/api/'+controllername + '/' + methodName
})
.then(function (response) {
return response.data;
},
function (response) {
return response.data;
});
return promise;
};
});
のように$スコープ変数の値を取得します。 – qchap
@qchapは角度フィルタとは関係ありません – charlietfl
@charlietfl私はあなたに同意しません。このような関数の場合、$ scope.addComma = function(x){ return x.toString()。/を置き換える(/ \ B(?=(\ d {3})+ "、"); } '私はフィルタが良い選択肢だと思います。この関数の実装を1つだけ行うことができます。しかし、私はこの命題が質問の最初の部分にすぎないことに同意します。 – qchap