繁体   English   中英

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

[英]Injecting dependency in controller (not as argument)

我想在模式(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
}

除了解析,您还可以将范围传递给$ modal选项:

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

然后在您的控制器中:

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

当您将$ scope传递给$ modal时,$ modal将创建一个子作用域,该子作用域典型地从父作用域继承inModal。 在普通视图中调用控制器功能时,不会定义inModal。

您可以使用$ 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 
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM