1. ホーム
  2. javascript

[解決済み] あるAngularJSのコントローラが別のコントローラを呼び出すことはできますか?

2022-03-17 06:29:34

質問

あるコントローラーで別のコントローラーを使用させることは可能ですか?

例えば、こんな感じです。

で配信されたメッセージを単純に表示したHTML文書です。 MessageCtrl のコントローラーを使用しています。 messageCtrl.js ファイルを作成します。

<html xmlns:ng="http://angularjs.org/">
<head>
    <meta charset="utf-8" />
    <title>Inter Controller Communication</title>
</head>
<body>
    <div ng:controller="MessageCtrl">
        <p>{{message}}</p>
    </div>

    <!-- Angular Scripts -->
    <script src="http://code.angularjs.org/angular-0.9.19.js" ng:autobind></script>
    <script src="js/messageCtrl.js" type="text/javascript"></script>
</body>
</html>

コントローラファイルには、以下のコードが含まれています。

function MessageCtrl()
{
    this.message = function() { 
        return "The current date is: " + new Date().toString(); 
    };
}

これは単に現在の日付を表示するものです。

もう一つコントローラを追加するとしたら。 DateCtrl に特定の書式で日付を渡す。 MessageCtrl このような場合、どのようにすればよいのでしょうか。 DIフレームワークでは XmlHttpRequests とサービスにアクセスすることができます。

解決方法は?

コントローラ間の通信には複数の方法があります。

一番いいのは、サービスを共有することでしょう。

function FirstController(someDataService) 
{
  // use the data service, bind to template...
  // or call methods on someDataService to send a request to server
}

function SecondController(someDataService) 
{
  // has a reference to the same instance of the service
  // so if the service updates state for example, this controller knows about it
}

もう一つの方法は、スコープでイベントを発することです。

function FirstController($scope) 
{
  $scope.$on('someEvent', function(event, args) {});
  // another controller or even directive
}

function SecondController($scope) 
{
  $scope.$emit('someEvent', args);
}

どちらの場合も、同様に任意のディレクティブと通信することができます。