2015-01-27 4 views
1

컨트롤러를 모달 (ui.bootstrap) 및 일반보기 (모달 제외)로 사용하고 싶습니다. 컨트롤러는 정상보기 및 모달로 항목 추가에 사용됩니다.컨트롤러에 의존성 주입하기

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

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

문제는 내가 컨트롤러에 주입 할 필요가 그것을 사용하는 것입니다

는 컨트롤러가 내가 모달에서 해결 ATTR을 사용하고 모달 또는 일반보기로 사용하는 경우 알고

하지만이 기능은 정상적인보기에서는 사용할 수 없습니다. 컨트롤러에 inModal을 삽입 할 수 있습니까?

대신 해결의
function myCtrl($scope) { 
    //$scope.inModal = inject inModal if it is available 
} 
+0

당신은 $ 인젝터를 사용하려고 할 수 있습니다하지만 난 당신이 정직하게 –

+0

을이 종속성이 없거나하지 않는 경우이 오류가 발생합니다 확실하지 않습니다 : 컨트롤러를 모달 방식으로 작동하는지 여부는 알 수 없습니다. – zeroflagL

+0

어떻게 해야할지 모르겠다'$ injector.get ("serviceName")'? – piernik

답변

0

, 당신이 당신의 $ 모달 옵션 범위를 전달할 수 있습니다

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

를 그런 다음 컨트롤러 :

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

당신이 모달 $로 $ 범위를 통과하면, $ 모달은 부모 범위에서 inModal을 프로토 타입 적으로 상속하는 하위 범위를 만듭니다. 제어기 기능이 정상보기에서 호출 될 때, inModal은 정의되지 않습니다.

0

이 같은 주입 $ 사용하여 주입 할 수

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

내가 그 짓을하고 잘 작동합니다. 아래는 $ 모달의 코드입니다.

$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 
}); 
+0

$ injector는 서비스에서만 작동합니다 .- 해결은 현지인으로 취급되며 – piernik

+0

refrence http://angular-ui.github.io/bootstrap/#/modal을 삽입 할 수 없습니다. – user2579720