programing

컨트롤러에 동적으로 의존하는 $inject 방법

easyjava 2023. 2. 23. 23:06
반응형

컨트롤러에 동적으로 의존하는 $inject 방법

난 아직 Angularjs 데뷔작이야컨트롤러에 (생성한) 서비스의 종속성을 동적으로 주입합니다.

그러나 종속성을 사용하여 서비스를 코드화하면 다음 오류가 발생합니다.

오류: 알 수 없는 공급자: $windowProvider <-$window <-base64

이것은 컨트롤러의 코드입니다.

var base64 = angular.injector(['servicesModule']).get('base64');
console.log("base64", base64.encode("my text will be encoded"));

이 코드는 동작합니다.

var servicesModule = angular.module('servicesModule', []);
servicesModule.factory('base64', function() {
    return {

        name: 'base64',
        readonly: false,

        encode: function(input) {
            return window.btoa(input);
        },

        decode: function(input) {
            return window.atob(input);
        }

    };

});

이 코드는 동작하지 않습니다.

var extModule = angular.module('ext', []);
extModule.factory('base64', ['$window', function($window) {
    return {

        name: 'base64',
        readonly: false,

        encode: function(input) {
            return $window.btoa(input);
        },

        decode: function(input) {
            return $window.atob(input);
        }

    };

}]);

또 다른 문제는 서비스가 컨트롤러와 같은 모듈 내에 있는 경우입니다.모듈에 종속성이 있는 경우 작동하지 않습니다(모듈 설정에 $routeProvider 종속성이 있습니다).

오류: 알 수 없는 공급자: mainModule의 $routeProvider

var mainModule = angular.module('main', [],
    function($routeProvider, $locationProvider) {
        //Some routing code
    }
);

JS 피들

종속성이 있는 동일한 모듈(컨트롤러+서비스):http://jsfiddle.net/yrezgui/YedT2/

종속성이 있는 다른 모듈: http://jsfiddle.net/yrezgui/YedT2/4/

의존관계가 없는 다른 모듈:http://jsfiddle.net/yrezgui/YedT2/5/

앵귤러라고 하지 마.injector() -- 새 인젝터가 생성됩니다.대신, 이미 작성된 것을 주입합니다.$injector를 컨트롤러에 삽입하여 사용합니다.

그래서 다음 대신:

var algoController = function($scope) {
    $scope.base64 = angular.injector(['main']).get('base64');
};

다음을 수행합니다.

var algoController = function($scope, $injector) {
    $scope.base64 = $injector.get('base64');
};

그러나 대부분의 경우 다음과 같이 서비스를 동적으로 주입하지 않고 직접 주입해야 합니다.

var algoController = function($scope, base64) {
    $scope.base64 = base64;
};

'각'도 참조JS는 스코프 또는 컨트롤러를 동적으로 주입합니다.

언급URL : https://stackoverflow.com/questions/12758157/how-to-inject-dynamically-dependence-in-a-controller

반응형