Скажем у меня есть следующий завод:Угловое значение часового завода
app.factory("categoryFactory", function (api, $http, $q) {
var selected = null;
var categoryList = [];
return {
getList: function() {
var d = $q.defer();
if(categoryList.length <= 0){
$http.get(api.getUrl('categoryStructure', null))
.success(function (response) {
categoryList = response;
d.resolve(categoryList);
});
}
else
{
d.resolve(categoryList)
}
return d.promise;
},
setSelected: function (category) {
selected = category;
},
getSelected: function() {
return selected;
}
}
});
теперь у меня есть два контроллера, используя этот завод в то же время. Из-за этого оба контроллера должен быть уведомлен при обновлении для этого я попытался следующее:
app.controller('DashboardController', ['$http', '$scope', '$sessionStorage', '$log', 'Session', 'api','categoryFactory', function ($http, $scope, $sessionStorage, $log, Session, api, categoryFactory) {
$scope.selectedCategory = categoryFactory.getSelected();
}]);
В то время как мой другой контроллер выглядит следующим образом:
app.controller('NavController', ['$http', '$scope', '$sessionStorage', '$log', 'Session', 'api', 'FileUploader', 'categoryFactory', function ($http, $scope, $sessionStorage, $log, Session, api, FileUploader, categoryFactory) {
$scope.categories = [];
categoryFactory.getList().then(function (response) {
$scope.categories = response;
});
$scope.selectCategory = function (category) {
categoryFactory.setSelected(category);
}
}]);
как всегда, когда NavController
изменил значение это было не изменен в DashboardController
Мой вопрос в том, как я могу либо watch
, либо другим способом получить уведомление при изменении значения?
Hey tom работал как шарм, однако вам нужно удалить «это» из вашей функции registerObserver –
@MarcRasmussen ah, отметил ... done – Tom
Отличный ответ! Просто FYI: дополнительный $ scope. В моем случае был необходим вызов $ apply(), чтобы обновить мои переменные! :) – luQ