Арф, я добавил $ q, и я уверен, что я близок к чему-то, но все равно из ng-if результат моей функции set () недоступен ... :( Является ли моя новая функция (Edit 3), правильный ?

ю, что директива ng-if создает новую дочернюю область, и я хотел бы знать, КАК и ЕСЛИ возможно превратить ng-if в другую.

Пока я не вижу никаких значков. Я пробовал ng-hide, но я видел две иконки одновременно, невозможно решить эту проблему ... Я также пробовал ng-show, но с теми же результатами, что и ng-if.

Функция Set () возвращает true или false, она работает, потому что я вижу результат в консоли.

Есть идеи ?

$scope.set = function($r)
{
    firebase.database().ref('events/'+$r.selfID).once("value").then(function(snapshot)
    {   
        var nbPerson = snapshot.val().nbPerson;
        var varPerson = snapshot.val().varPerson;

        //console.log("nbPerson :", nbPerson);
        //console.log("varPerson", varPerson);

        if(nbPerson === varPerson)
        {
            //console.log("true");
            return true;
        }
        else
        {
            //console.log("false");
            return false;
        }
    });
};
<button ng-if ="give(f) === false" class="badge badge-positive" ng-click="joinEvent(e)">

    <span ng-if ="set(r) === true">
        <ion-icon class="ion-person-add give-var"></ion-icon>
    </span>


    <span ng-if ="set(r) === false">
        <ion-icon class="ion-person-add var"></ion-icon>
    </span>

</button>

РЕДАКТИРОВАТЬ :

Я добавил функцию set (), $ r - это запись из БД Firebase, у нее есть переменная «selfID» с его идентификатором записи.

Я уверен, что функция give () работает, потому что у меня есть другая кнопка, работающая с ng-if = "give (f) === true".

Весь этот код работает на одном контроллере.

РЕДАКТИРОВАТЬ 2: (новый фрагмент)

РЕДАКТИРОВАТЬ 3: (добавить $ q в зависимости)

function ($scope, $rootScope, $q, $stateParams, $firebase, $firebaseArray, $state, $ionicPopup) {

    $scope.set = function($r)
    {
        $scope.varPerson = "";
        $scope.nbPerson = "";

        var basePromise = firebase.database().ref('events/'+$r.selfID).once("value");

        $q.when(basePromise).then(function(snapshot)
        {
            $scope.nbPerson = snapshot.val().nbPerson;
            $scope.varPerson = snapshot.val().varPerson;

            if($scope.nbPerson === $scope.varPerson)
            {
                return true;
            }
            else
            {
                return false;
            }
        });
    }
};

РЕДАКТИРОВАТЬ 4: (наконец)

Хорошо, я не смог справиться с синхронными проблемами, поэтому я просто добавил тест внутри двух ng-if, то есть без функции set ().

Большое спасибо тем, кто мне помог, и особенно @georgeawg за его опыт!

    <span ng-if ="r.nbPerson === r.varPerson">
        <ion-icon class="ion-person-add give-var"></ion-icon>
    </span>

    <span ng-if ="r.nbPerson > r.varPerson">
        <ion-icon class="ion-person-add var"></ion-icon>
    </span>

Ответы на вопрос(2)

Ваш ответ на вопрос