Переменные привязки от Service/Factory к контроллерам

У меня есть переменная, которая будет использоваться одним или несколькими контроллерами, измененными службами. В этом случае я создал службу, которая хранит эту переменную в памяти и распределяет между контроллерами.

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

Я создаю этот скрипт, чтобы помочь. http://jsfiddle.net/ncyVK/

--- Обратите внимание, что {{countService}} или {{countFactory}} никогда не обновляется, когда я увеличиваю значение count.

Как я могу привязать переменную Service/ Factory к переменной $scope.variable в контроллере? Что я делаю неправильно?

Ответ 1

Вы не можете привязывать переменные. Но вы можете связывать переменные аксессоры или объекты, которые содержат эту переменную. Здесь зафиксировано jsfiddle.

В основном вам нужно передать в область что-то, что может вернуть/или сохранить текущее значение. Например.

Factory:

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;
        }
    }               
});

Контроллер:

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

Вид:

<div ng-controller="FactoryCtrl">

    <!--  this is now updated, note how count factory is called -->
    <p> This is my countFactory variable : {{countFactory()}}</p>

    <p> This is my updated after click variable : {{countF}}</p>

    <button ng-click="clickF()" >Factory ++ </button>
</div>

Ответ 2

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

1) Получите эти данные не внутри вашего сервиса. Получите данные внутри контроллера, и у вас не будет проблем с его привязкой.

2) Вы можете использовать функцию AngularJs Events. Вы даже можете отправлять данные через это событие.

Если вам нужно больше с примерами, вот статья, которая может вам помочь.

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