AngularJs ng-check с использованием функции

У меня есть форма, и я пытаюсь использовать функцию во вводе ng-checked="someFunction()", и я не знаю, возможно ли это, или я делаю что-то неправильно. У меня есть функция в контроллере, и я нахожу ее в поле зрения. Что касается функции, я думаю, что она определенно работает, и ng-checked запускает ее, но возврат true или false ничего не меняет. Итак, вопрос в том, есть ли способ использовать функцию в 'ng-checked'?

    $scope.multiAnswers = function (answers, optionId) {
        angular.forEach(answers, function (answer, key) {
            if (answer.option_choice_id == optionId) {
                return true;
            }
        });

        return false;
    };

Ответ 1

ng-checked работает с функциями. Вот демонстрация:

$scope.getCheckedFalse = function(){
    return false;
};

$scope.getCheckedTrue = function(){
    return true;
};

Html:

<input type="checkbox" ng-checked="getCheckedFalse()"/>
<input type="checkbox" ng-checked="getCheckedTrue()"/>

DEMO

Ваша проблема в том, что вы никогда не возвращаете true в конце функции. return true; внутри angular.forEach не помогает.

Try:

$scope.multiAnswers = function (answers, optionId) {
     var returnValue = false;
     angular.forEach(answers, function (answer, key) {
         if (answer.option_choice_id == optionId) {
              returnValue = true;
              return;
         }
     });

     return returnValue;
};

Похоже, что мы не можем выйти из angular.forEach: Angular JS break ForEach

Чтобы быстро улучшить производительность, если answer.option_choice_id == optionId true. Вы можете попробовать jQuery $. Each или используя vanilar javascript (для цикла).

Ответ 2

Что вам нужно сделать, это использовать переменную состояния как выражение ng-checked, например: ng-checked="someValue". Тогда вам нужно в другом месте вашего кода обновить значение $scope. Проблема в том, что, используя функцию, она не осознает, что на самом деле она должна обновлять ее значение.