在控制器中注入依赖(不作为参数)

时间:2015-01-27 13:58:11

标签: angularjs dependency-injection angular-bootstrap

我想在模态(ui.bootstrap)和普通视图(没有模态)中使用控制器。 控制器用于添加内容 - 正常视图和模态。

要知道模态或普通视图是否使用控制器我在模态中使用resolve attr:

$modal.open({
    resolve: {
        inModal: function() {
            return true;
        }
    }
    //other
})

问题是要使用它我需要将它注入控制器:

function myCtrl($scope, inModal) {
    $scope.inModal = inModal;
}

但是这种依赖性在普通视图中不可用。 我可以在控制器中注入inModal吗?

function myCtrl($scope) {
    //$scope.inModal = inject inModal if it is available
}

2 个答案:

答案 0 :(得分:0)

您可以将范围传递给$ modal选项,而不是解决方案:

   $scope.inModal = true;
   $modal.open({ scope: $scope });

然后在你的控制器中:

function myCtrl($scope) {
    if($scope.inModal) {
       ...
    }
}

当您将$ scope传递给$ modal时,$ modal将创建一个子范围,该范围原型从父范围继承inModal。在普通视图中调用控制器函数时,不会定义inModal。

答案 1 :(得分:0)

您可以使用$ inject注入它:

myCtrl.$inject = ['$scope', 'inModal'];

我已经做到了,而且工作正常。下面是$ modal的代码。

$modal.open({
    controller : "myCtrl",
    resolve: {
        inModal: function() {
            return true;
        }
    }
})

控制器:

app.controller('myCtrl', function($scope, inModal) {
    //you can directly use inModal or assign it to $scope property 
});