簡體   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