将依赖项注入指令调用的控制器

Inject dependency to controller called by directive

我想知道是否可以(如果可以,那么如何?:))向指令调用的控制器注入依赖项。

我有一个名为 MyCtrl 的控制器控制器。这是他的签名:

app.controller('MyCtrl', function ($scope, dataService, aDependency){...}

这个Controller通常定义在我的路由中:

.segment('myPage', {
                templateUrl: templatesUrl + 'mypage.html',
                resolve: {
                    aDependency: ['$q', 'dataService', '$location', function ($q, dataService, $location) {
                        var defer = $q.defer();
                        dataService.retrieveCCData(defer, $location);
                        return defer.promise;
                    }],
                },
                controller: 'MyCtrl'
            })

但是现在,我还想从指令中调用这个控制器。 问题是我不知道如何注入 aDependency。 它说提供者未知。 这是我的指令:

app.directive('gettingStarted1', ['dataService', function (dataService) {
    return {
        restrict: 'E',
        templateUrl: templatesUrl + 'mypage.html',
        controller: 'MyCtrl',
        //resolve: {
            //datasources: ['dataService', function (dataService) {
                //return null;
            //}]
        //}
    };
}]);

无法在指令中解决。 一些帮助将不胜感激 谢谢

您可以使用指令中的控制器功能

.directive("sampledirective", function (dependancy1, dependancy2, ....) {

return {       
        scope: '=',
        controller: function ($rootScope, $scope) {
          //DO your controller magic here where you got your scope stuff
        }
  }
})

我了解到的一件事是 $scope 值似乎不会立即从指令更新到控制器。如果你使用

这样的对象
   $scope.smth.smth = 'test'

它会立即更新,否则您需要 $apply

aDependency 设为单独的服务。

app.provider('aDependency', function () {
    this.$get = ['$q', 'dataService', '$location', function ($q, dataService, $location) {
        var defer = $q.defer();
        dataService.retrieveCCData(defer, $location);
        return defer.promise;
    }];
});

您可以通过

解决
            resolve: {
                'aDependency': 'aDependency',
            }

            resolve: ['aDependency'];