13

次のようにコントローラーを登録しました。

myModule.controller('MyController', function ($scope, ...some dependencies...)
{
    ....

HTML で使用ng-controller="MyController"するとすべて正常に動作しますが、このコントローラーをディレクティブのコントローラーとして使用したいと考えています。このようなもの:

otherModule.directive('myDirective', function() {
    return {
        restrict: 'A',
        replace: true,
        controller: ??????????,
        scope: {
            foo: '=',
            blah: '=',
        },
        template: '....'
    }
});

置くだけで疲れましMyControllerたが、「MyController is not defined」とエラーになります。グローバル名前空間に入れるだけでうまくいくと確信MyControllerしていますが、グローバル名前空間には何も入れたくありません。違いがある場合、myModuleは の依存関係として定義されotherModuleます。ディレクティブを使用するために、このコントローラーへの参照を取得するにはどうすればよいですか?

提案どおり、試してみ$controller('MyController')ましたが、次のエラーが表示されます。

Error: Unknown provider: $scopeProvider <- $scope <- myDirectiveDirective
at Error (<anonymous>)
at http://localhost/resources/angular.js?_=1360613988651:2627:15
at Object.getService [as get] (http://localhost/resources/angular.js?_=1360613988651:2755:39)
at http://localhost/resources/angular.js?_=1360613988651:2632:45
at getService (http://localhost/resources/angular.js?_=1360613988651:2755:39)
at invoke (http://localhost/resources/angular.js?_=1360613988651:2773:13)
at Object.instantiate (http://localhost/resources/angular.js?_=1360613988651:2805:23)
at http://localhost/resources/angular.js?_=1360613988651:4621:24
at otherModule.directive.restrict (http://localhost/resources/app.js?_=1360613988824:862:15)
at Object.invoke (http://localhost/resources/angular.js?_=1360613988651:2786:25) 

このエラーをどうすればよいかわかりません。これを機能させるためにさらに必要なものはありますか?

4

2 に答える 2

25

次のものを使用できるようです:

controller: 'MyController' 

コントローラーがディレクティブと同じモジュール内にあるか、またはディレクティブを含むモジュールで構成される上位レベルのモジュール内にある場合。

アプリモジュールに構成された2つの異なるモジュール(コントローラー用とディレクティブ用)で試してみたところ、うまくいきませんでした。

于 2013-02-11T20:39:22.057 に答える
10

あなたがすでに受け入れた答えは機能し、ほとんどすべての場合に選択する必要があります...

完全を期すために:別のモジュールからコントローラーを使用する方法は次のとおりです

(PS:これをしないでください。笑:P)

var app = angular.module('myApp', ['myDirectives']);

app.controller('AppCtrl1', function($scope) {
    $scope.foo = 'bar';
});


var directives = angular.module('myDirectives', []);

directives.directive('test', function($controller) {
   return {
       template: '<h1>{{foo}}</h1>',
       link: function(scope, elem, attrs) {
          var controller = $controller('AppCtrl1', { $scope: scope });

          console.log($scope.foo); //bar
       }
   };
});
于 2013-02-11T20:46:22.563 に答える