Vinculando Variáveis ​​de Serviço / Fábrica para Controladores

Eu tenho uma variável que será usada por um ou mais controladores, alterados por serviços. Nesse caso, criei um serviço que mantém essa variável na memory e compartilha entre os controladores.

O problema é: toda vez que a variável muda, as variables ​​nos controladores não são atualizadas em tempo real.

Eu crio este violino para ajudar. http://jsfiddle.net/ncyVK/

— Observe que o {{countService}} ou {{countFactory}} nunca é atualizado quando eu incrementar o valor da contagem.

Como posso vincular a variável Service / Factory a $ scope.variable no Controller? O que estou fazendo errado?

Você não pode ligar variables. Mas você pode vincular acessadores variables ​​ou objects que contenham essa variável. Aqui está jsfiddle fixo.

Basicamente você tem que passar para o escopo algo, que pode retornar / ou mantém o valor atual. Por exemplo

Fábrica:

 app.factory('testFactory', function(){ var countF = 1; return { getCount : function () { return countF; //we need some way to access actual variable value }, incrementCount:function(){ countF++; return countF; } } }); 

Controlador:

 function FactoryCtrl($scope, testService, testFactory) { $scope.countFactory = testFactory.getCount; //passing getter to the view $scope.clickF = function () { $scope.countF = testFactory.incrementCount(); }; } 

Visão:

 

This is my countFactory variable : {{countFactory()}}

This is my updated after click variable : {{countF}}

Não é uma boa idéia ligar quaisquer dados de serviço, mas se você precisar mais, sugiro que você siga as duas maneiras.

1) Obter esses dados não dentro do seu serviço. Obter dados dentro de você controlador e você não terá nenhum problema para ligá-lo.

2) Você pode usar o recurso AngularJs Events. Você pode até enviar dados para o evento.

Se você precisar de mais exemplos, aqui está o artigo que talvez possa ajudá-lo.

http://www.w3docs.com/snippets/angularjs/bind-value-between-service-and-controller-directive.html