@Banjamin
Пишу

Как организовать вызов функции?

Добрый день.
Проект на 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 будет всегда проверять, даже в случае изменении объекта в фабрике, который эта функция возвращает?
  • Вопрос задан
  • 38 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы