1

Предположим, что имеется только один завод (общая услуга).Как использовать общие службы с контроллерами, которые не используют общие службы?

angular.module('sharedService', []) 
    .factory('sharedSrv', sharedService) 

function sharedService() { 
    var number; 

    return { 
    getNum: getNumber 
    }; 

    function getNumber() { 
    return number; 
    } 

    function setNumber(i) { 
    number = i; 
    } 
} 

Я видел, мы можем внедрить общие службы, передавая зависимость в модуль

angular.module('app', ['sharedService']) 
.controller('theCtrl', function(sharedSrv) { 
    var self = this; 

    self.setSharedNumber = sharedSrv.setNumber; 
} 

Однако, как внедрить общую службу, если службы используют контроллер от своего собственного модуля?

angular.module('app', ['sharedService']) 
.controller('theCtrl', theCtrlFun) 
.service('theSrv', theSrvFun) 

theCtrlFun.$inject = ['theSrv'] 

function theCtrlFun(localSrv) { 
// How call sharedService ? 
} 

function theSrvFun() { 
    // Some fantastic features. 
} 

Благодарим за помощь.

ответ

2

Вы не должны быть инъекционным модулем обслуживания как переменные, необходимо передать имя модуля, как string

angular.module('app', [sharedService]) 
.controller('theCtrl', function(sharedSrv) { 

должны be

angular.module('app', ['sharedService']) 
.controller('theCtrl', function(sharedSrv) { 

ИЛИ вы можете следовать Инлайн массив аннотации DI

angular.module('app', ['sharedService']) 
.controller('theCtrl', ["sharedSrv", function(sharedSrv) { 
    //code here 
}]); 
+0

Благодарим вас за исправление. Но в последнем блоке, как «sharedSrv» будет распознаваться, если эта служба находится в другом модуле приложения? –

+0

@MatthieuLobry, который был опечаткой, спасибо за голову, я исправил его. –

1

Удалить sharedService из инструкции angular.module('app', [sharedService]), так как ваши общие услуги не являются частью этого модуля.

Вы должны вводить theSrv и не theSrvFun в заявлении theCtrlFun.$inject = ['theSrv']

В функции theCtrlFun просто вызвать метод этого сервиса. someMethod например определяется на theSrv службе, вам нужно позвонить, как это

theSrv.someMethod(); 

например

angular.module('app', []) 
    .controller('theCtrl', theCtrlFun) 
    .service('theSrv', theSrvFun) 

theCtrlFun.$inject = ['theSrv'] 

function theCtrlFun(localSrv) { 
    theSrv.someMethod(); // calll in this way 
} 

function theSrvFun() { 
    // Some fantastic features. 
} 

лучше, чтобы определить DI с помощью Array Annotation

angular.module('app', []) 
    .controller('theCtrl', ['theSrv', function(theSrv) { 

     theSrv.callMe(); 

    }]) 
    .service('theSrv', function() { 

     this.callMe = funtion() { 


     } 

    }) 
+0

Спасибо за вашу помощь, я сделал эффективно много ошибок в синтаксисе. Но я хочу использовать sharedService AND TheSrv одновременно в одном контролере одновременно. (Srv будет содержать инструменты только для Ctrl, но sharedService будет использоваться другими модулями). –

0

Попробуйте это:

angular.module('app', []) 
.controller('theCtrl', theCtrlFun) 
.service('theSrv', theSrvFun) 

theCtrlFun.$inject = ['theSrv'] 

function theCtrlFun(localSrv) { 
// How call sharedService ? 
console.log(localSrv) 
} 

function theSrvFun() { 
    // Some fantastic features. 
} 

plnkr: http://plnkr.co/edit/lSosJbYfG6tuF4pCXYqR?p=preview

+0

Спасибо, я допустил ошибки. Но если я хочу использовать службу Svv и sharedService в том же контроллере, как я могу это сделать? –

+0

, чтобы использовать услугу из другого модуля, вам необходимо вставить этот модуль в свой модуль, а затем ввести службу из этого модуля в контроллер –

 Смежные вопросы

  • Нет связанных вопросов^_^