[解決済み] angularですべてのコントローラで関数を利用できるようにすることはできますか?
2022-04-21 19:16:40
質問
効用関数がある場合
foo
の中の任意の場所から呼び出せるようにしたい。
ng-app
の宣言があります。モジュールの設定でグローバルにアクセスできるようにする方法はありますか?それとも、すべてのコントローラでスコープに追加する必要がありますか?
解決方法は?
基本的には、サービスとして定義するか、ルートスコープに配置するかの2つの選択肢があります。ルートスコープを汚染しないように、サービスを作ることをお勧めします。サービスを作成し、コントローラで利用できるようにするには、次のようにします。
<!doctype html>
<html ng-app="myApp">
<head>
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="http://code.angularjs.org/1.1.2/angular.min.js"></script>
<script type="text/javascript">
var myApp = angular.module('myApp', []);
myApp.factory('myService', function() {
return {
foo: function() {
alert("I'm foo!");
}
};
});
myApp.controller('MainCtrl', ['$scope', 'myService', function($scope, myService) {
$scope.callFoo = function() {
myService.foo();
}
}]);
</script>
</head>
<body ng-controller="MainCtrl">
<button ng-click="callFoo()">Call foo</button>
</body>
</html>
それが難しい場合は、このようにルートスコープに追加することができます。
<!doctype html>
<html ng-app="myApp">
<head>
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="http://code.angularjs.org/1.1.2/angular.min.js"></script>
<script type="text/javascript">
var myApp = angular.module('myApp', []);
myApp.run(function($rootScope) {
$rootScope.globalFoo = function() {
alert("I'm global foo!");
};
});
myApp.controller('MainCtrl', ['$scope', function($scope){
}]);
</script>
</head>
<body ng-controller="MainCtrl">
<button ng-click="globalFoo()">Call global foo</button>
</body>
</html>
そうすることで、すべてのテンプレートが
globalFoo()
をコントローラからテンプレートに渡す必要がありません。
関連
-
[解決済み] 誰かangularjsの$qサービスの使用について説明してください。[重複しています]。
-
[解決済み] AngularJS テンプレートにおける if else ステートメント
-
[解決済み] 関数のソースコードを見るにはどうしたらいいですか?
-
[解決済み] あるAngularJSのコントローラが別のコントローラを呼び出すことはできますか?
-
[解決済み] 部分テンプレートとテンプレートの複雑なネスト
-
[解決済み] ng-repeat内のng-click関数にパラメータを追加しても、うまくいかないようです。
-
[解決済み] モデルデータや振る舞いをどこに置くか?[tl; dr; サービスを利用する]
-
[解決済み】jQueryの.click - ユーザー関数にパラメータを渡す
-
[解決済み] angular ディレクティブは、ディレクティブの属性で指定された式で関数に引数を渡すことができますか?
-
[解決済み] AngularJSアプリケーションに小さなユーティリティ関数を追加するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】TypeError: window.initMap is not a function
-
[解決済み】Angularjsのng-viewが動作しない。
-
[解決済み] 方法 $state.go()
-
[解決済み] ReferenceError: Angularは定義されていません。
-
[解決済み] Apigee API へのリクエストで 401 レスポンスエラーが発生する
-
[解決済み] 新しい/分離されたスコープを求める複数のディレクティブ [ngController, ...] がある。
-
[解決済み] angularjsで$compileを操作する
-
[解決済み] Ui-srefがクリッカブルリンクを生成しない/動作しない
-
[解決済み] ng-modelとng-bindの違いは何ですか?
-
[解決済み] AngularJSのサービスをコンソールからテストするにはどうしたらいいですか?