2014-09-09 4 views
0

Я впрыскивается службу в директиву, есть ли способ, что я могу обмениваться данными в службе в директивеУгловая с помощью службы переменной

как если у меня есть какая-то директива под названием resultsDirective, некоторые службы называют dataService было введено (сделав это, как я иду). Есть ли способ, с помощью которого я могу получить доступ к переменной из службы в директиве? для реализации некоторых:

angular.module("someModule").service("dataService", function() { 
    var shareVariable; 
}) 

angular.module("someModule").directive("resultsDirective" , ["dataService", function(dataService) { 
    return { 
     restrict: , 
     scope: , 
     link: function() {} 

     //sorry about the lack of implementation here, just made something skeletal 
    } 
}]) 

так, если я просто хотел console.logshareVariable в resultsDirective, как бы я доступ к этим данным? Я уверен, что в Угловом есть простой способ?

ответ

0

Это не проблема, это проблема с javascript. Вы не можете получить доступ к локальным облачным переменным за пределами области действия. Вы должны выставить sharedVariable, делая что-то вроде этого

angular.module("someModule").service("dataService", function() { 
    this.shareVariable = null; 
}); 


(function() { 

    var app = angular.module('myApp', []); 

    app.service("dataService", function() { 
     this.shareVariable = 'shohel'; 
    }); 

    app.directive("resultsDirective", ["dataService", function (dataService) { 
     return { 
      restrict: 'E', 
      scope: {}, 
      link: function (scope, ele, att) { 
       var svc = dataService.shareVariable; 
      } 
     }; 

    }]); 
})(); 
+0

Вы ничего не возвращаете для обслуживания https://docs.angularjs.org/guide/services#creating-services – donnanicolas

+0

@donnanicolas, использующий завод. Он пользуется услугой. https://docs.angularjs.org/api/auto/service/$provide#service – Vadim

0

Во-первых, помните услуги вид одиночек, поэтому изменение переменной внутри службы будет иметь эффект на все приложения. Проблема, с которой вы сталкиваетесь, заключается в том, что вы не знаете, что такое закрытие, я рекомендую посмотреть, что JS Closure

Как это решить? Два варианта:

  • Возвращает объект со свойством (не рекомендуется, может запутаться)
  • Сделать функциональностью геттер/сеттер пример

код

var myModule = angular.module('myModule' []); 
myModule.factoy('service', function() { 
    var myVariable; 

    return { 
     getMyVariable: function() { return myVariable; }, 
     setMyVariable: function (newVal) { myVariable = newVal; } 
    } 
}); 

Существует на самом деле гораздо больше вы можете сделать, но я не знаю, что вам нужно

Также ваш сервис e не будет работать, посмотрите: Creating Services - AngularJS

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