Добрый день.
Проект на AngularJs. Есть два контроллера и фабрика.
первый контроллер вызывает метод из фабрики для обращения к бд.
function navbarCtrl($scope, Auth) {
vm = this
vm.login = async function () {
console.log(Auth.getUsername())
const authToken = await Auth.login(vm.credential.username, vm.credential.password)
}
vm.credential = {
username: null,
password: null
}
}
В случае успеха, фабрика создает объект. Также в фабрике есть метод который возвращает значение объекта.
auth.getUsername = function () {
if (auth.user && auth.user.username) {
return auth.user.username;
} else {
return null
}
}
В меню навигации есть кнопки которые появляются в зависимости от статуса авторизации
<ul class="nav navbar-nav navbar-right" ng-controller='statusCtrl as sc' >
<li ><a href="#/login" ng-hide='sc.getUserName()'>Sing in </a></li>
<li ng-show='sc.getUserName()'><a href="#/login">{{sc.getUserName()}} logout</a></li>
</ul>
их обрабатывает второй контроллер, который должен менять состояние кнопок.
function statusCtrl($scope, Auth) {
vm = this
vm.getUserName = function () {
return Auth.getUsername()
}
}
Он обращается к фабрике и проверяет наличие объекта, но при первом клике, в случае успеха, т.к. функция запроса к бд асинхронна, идет проверка значения getUsername,но оно еще равно NULL, а когда объект создается, повторной проверки не происходит. Возможно ли организовать функцию getUsername, которую angular будет всегда проверять, даже в случае изменении объекта в фабрике, который эта функция возвращает?