web-dev-qa-db-ja.com

ユーザー定義関数を配置する場所Angular JS?

私の見解では、レンダリングしたい:

_<p>
  {{ say() }}
</p>
_

sayは次のように定義されます:

_say = function() {
  return "Hello World";
}
_

コントローラーで定義できます:

_function TestCtrl($scope) {
  $scope.say = function() { ... };
}
_

ただし、そのコントローラー内でのみアクセス可能です。

Angularファイル構造の外側で関数を定義する場合、何もレンダリングしません。_controllers.js_ファイルで定義する場合と同じですが、コントローラー関数スコープの外側です。

関数を配置する適切な場所はどこにあるので、どのコントローラーでもレンダリングできますか?

35
Kyle Macey

1つの方法は、複数のコントローラー間で共有したい機能を使用して サービスを作成 することです。詳細については この投稿 をご覧ください。

その後、作成したサービスを任意のコントローラーに挿入し、次のようなコードでsay()関数にアクセスできます。

function TestCtrl($scope, myService){
   $scope.say = myService.say;
}

myServiceを次のように定義した場所:

angular.module('myApp', [])
    .factory('myService', function () {
        return {
            say: function () {
                return "Hello World";
            }
        }
    });

jsFiddle と例を示します。

48
Gloopy