2015-05-19 2 views
2

У меня есть два контроллераКак я получить доступ к сферам в угловой службе

app.controller('TestCtrl1', ['$scope', function ($scope) { 
    $scope.save = function() { 
     console.log("TestCtrl1 - myMethod"); 
    } 
}]); 



app.controller('TestCtrl2', ['$scope', function ($scope) { 
$scope.var1 = 'test1'   

$scope.save = function() { 
      console.log("TestCtrl1 - myMethod"); 
    } 
}]); 

Тогда у меня есть две услуг

.service('Service1', function($q) { 
    return { 
     save: function(obj) { 
     } 
    } 
}) 

.service('Service2', function($q) { 
    return { 
     save: function(obj) { 
     } 
    } 
}) 
  1. Для моих 60% вещей я просто называю save на CTRL1, который затем вызвал метод сохранения услуги

  2. Теперь Есть случаи, когда перед сохранением мне нужно чтобы сделать некоторые вещи, как chnaging некоторые параметры объекта разные, чем Genral случае я проверить е, г

    if(model == 'User'){ 
    //Here i do this (sample of code) 
        var service = $injector.get('Service2'); 
        service.save() 
    

Теперь моя проблема заключается в службе 2 я нужен доступ к var1. Как я могу это сделать

+0

'$ rootScope' это один из способов сделать это. и передача его будет другой. – batmaniac7

ответ

1

Используйте сервис (ы) само по себе, чтобы разделить переменную как часть объекта обслуживания, а также методы каждой службы

.service('Service2', function($q) { 
    var self = this; 
    this.var1 = 'test1'; 
    this.save = function(obj) {    
    } 

}); 

app.controller('TestCtrl2', ['$scope','Service1','Service2', function ($scope, Service1, Service2,) { 
    // bind scope variable to service property 
    $scope.var1 = Service2.var1;  
    // add a service method to scope 
    $scope.save = Service1.save; 
    // now call that service method 
    $scope.save($scope.var1); 
}]); 

Вы можете также внедрить услугу в другой сервис, если необходимо

+0

Но эти переменные привязаны к объему контроллера. Предположим, что var является текущим активным меню. Теперь это означает, что мне также необходимо обновить Сервис, а также с помощью активного меню – user2134226

+0

Не знаете, какой магический ответ вы ищете. – charlietfl

+0

Это нормально, если я смотрю эти переменные в контроллере, а на chnage я обновляю служебные переменные. так люди делают вещи. В настоящее время я сделал это, но я не уверен, что это правильный путь. – user2134226

0

инъекционных услуг в другие услуги (один возможный метод):

HTML:

<div id="div1" ng-app="myApp" ng-controller="MyCtrl"> 

    <!--to confirm that the services are working--> 
    <p>service three: {{serviceThree}}</p> 

</div> 

ЯШ:

angular.module('myApp',[]) 

.service('s1', function() { 
    this.value = 3; 
}) 

.service('s2', function() { 
    this.value = 10; 
}) 

.service('s3', function(s1,s2) {  //other services as dependencies 
    this.value = s1.value+s2.value; //13 

}) 
.controller('MyCtrl', function($scope, $injector) { //$injector is a dependency 

    $scope.serviceThree = $injector.get('s3').value; //using the injector 

}); 

вот скрипку: https://jsfiddle.net/ueo9ck8r/

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