Проверка формы не запускается после загрузки данных - PullRequest
0 голосов
/ 27 августа 2018

У меня есть функция, которая вычисляет процент заполнения формы.

При редактировании существующей записи данные загружаются и обрабатываются, но проверка не запускается. Если я отредактирую данные на одном из входов, они сработают и начнут работать.

<div ng-form="dtform" class="container-fluid form-horizontal" ng-cloak>
    <fieldset ng-form="requestor_tab"> ... </fieldset>
    <fieldset ng-form="some_tab"> ... </fieldset>
</div>

События, запускающие функцию

$scope.$watch("data", () => { calculateCompleted(); }, true);
$scope.$watch("dtform.$valid", () => calculateCompleted());

Рассчитать функцию:

let calculateCompleted = () => {
    let errors = 0; 
    let success = 0;
    settings.tabs.forEach(tab => {

        // Here is the problem: $scope.dtform[tab].$$success is undefined.
        if ($scope.dtform && $scope.dtform[tab] && $scope.dtform[tab].$$success && $scope.dtform[tab].$$success.required)
            success += $scope.dtform[tab].$$success.required.length;
    });
    // some math logic
    return percentage;
};

Похоже, что $scope.dtform[tab].$$success не определено при запуске этой функции, но когда я проверяю значение в консоли, оно определено и имеет значение.

Кажется, мне не хватает дополнительного триггера, может кто-нибудь посоветовать, какой это может быть триггер?

Спасибо

Edit: Я знаю, что это можно решить, вызвав эту функцию из шаблона <div ng-hide="checkCompetion()"></div> но мне было интересно, есть ли более элегантное решение

1 Ответ

0 голосов
/ 27 августа 2018

Если ни одно из полей не является действительным, то в нем могут не быть определены объекты tab.

Попробуйте добавить это :

if($scope.dtform.hasOwnProperty(tab)){ 

К этому :

settings.tabs.forEach(tab => {

    // Check if it works adding it here.
    if($scope.dtform.hasOwnProperty(tab)){


        if ($scope.dtform && $scope.dtform[tab] && $scope.dtform[tab].$$success && $scope.dtform[tab].$$success.required)
            success += $scope.dtform[tab].$$success.required.length;


    }

});
...