1

次のようにコントローラーですべてのサービスを指定する代わりに:

mainApp.controller('MultiController', ['$scope', '$attrs', '$branchesService', '$repositoriesService', function ($scope, $attrs, $branchesService, $repositoriesService) {
console.log('multiController instantiated');
var vm = this;

// private idu funkcija definition bez scope
vm.init = function(mod) {
    vm.mod = mod;
    if (mod == "branch") {
        console.log('MultiController branchesService');
        vm.service = $branchesService;
    } else {
        console.log('MultiController repoService');
        vm.service = $repositoriesService;
    }

    vm.items = [];
    vm.selectedItem = null;
    vm.error = 'no Error at the moment...';

    loadRemoteData();
    console.log('multiController.init()');
}
vm.init($attrs.mod);

$inject を使用することは可能ですか? $attrs を使用して html から仕様を取得していますが、どのサービスを使用すればよいですか。

4

2 に答える 2

3

$injectorコントローラー内で依存関係を作成して$injector.getから、サービスオブジェクトを取得できます。

$injectorプロバイダーによって定義されたオブジェクト インスタンスの取得、型のインスタンス化、メソッドの呼び出し、およびモジュールのロードに使用されます。

基本的に、この$injector.getメソッドは、angular 内で指定したサービス名を検索し、見つかっcontextた場合はそれを返しobjectます。

コード

vm.init = function(mod) {
    vm.mod = mod;
    if (mod == "branch") {
        console.log('MultiController branchesService');
        vm.service = $injector.get('branchesService'); //you will have service instance here
    } else {
        console.log('MultiController repoService');
        vm.service = $injector.get('repositoriesService'); //you will have service instance here
    }

    vm.items = [];
    vm.selectedItem = null;
    vm.error = 'no Error at the moment...';

    loadRemoteData();
    console.log('multiController.init()');
}
于 2015-10-28T15:43:22.863 に答える
1

はい、注入$injectorして次のように使用できます。

var brancesService = $injector.get('brancesService');
于 2015-10-28T15:43:49.667 に答える