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

时间:2015-07-20 12:07:16

标签: angularjs angularjs-directive dependency-injection controller

我想知道是否有可能(如果是,如何?:)),将依赖注入到指令调用的控制器中。

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

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

此控制器通常在我的路线中定义:

.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;
            //}]
        //}
    };
}]);

指令中的解决是不可能的。 一些帮助将是欣赏 谢谢

2 个答案:

答案 0 :(得分:1)

使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'];

答案 1 :(得分:0)

您可以使用指令

中的控制器功能
.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'

立即更新,否则你需要申请