35

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

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

は次sayのように定義されています。

say = function() {
  return "Hello World";
}

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

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

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

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

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

4

1 に答える 1

48

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

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

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

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

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

例を含むjsFiddleを次に示します。

于 2012-09-18T16:43:05.633 に答える