У меня есть директива для объекта фильтра. Директива представляет фильтр как группу comboboxes. И у меня есть пара других директив, на которые должны влиять изменения в состоянии фильтра (например, список). Поэтому, когда я изменяю значение combobox в фильтре, он должен обновить свойство фильтра. Затем каким-то другим директивам следует сообщать, что фильтр был изменен и после этого обновлен. На данный момент у меня есть простой сервис для хранения состояния фильтра:AngularJS: сделать состояние обслуживания наблюдаемым
angular.module("services", []).factory("svcFilter", function(){
var filter = {};
return filter;
});
Эта услуга вводится в директиве фильтра. Когда значение выпадающего списка в директиве фильтра изменили фильтр изменения состояния:
angular.module("filter-module", ["services"])
.directive("filter", function(){
return {
restrict: "E",
templateUrl: "path/to/filter/template.html",
controller: function($scope, svcFilter){
...
$scope.$watch("filterProp1", function(newValue){
svcFilter["filterProp1"] = newValue;
});
}
}
});
где filterProp1 связан со значением ComboBox.
Пока все хорошо. Я могу добавить эту службу в другие директивы, и они будут иметь доступ к состоянию фильтра, но никогда не будут уведомлены об изменениях. Как его решить? Как уведомить других об изменениях?
см. Здесь http://jsfiddle.net/cxxLwbrm/ – sylwester
@sss, я смущен о том, как это работает. Как изменение в svcFilter.filterProp1 вызывает изменение в '
Да, это работает, потому что обе директивы имеют один и тот же объем и, следовательно, одно и то же свойство. Общий случай заключается в том, чтобы изолировать область действия директивы. – sedovav