показать / скрыть ограничение нескольких звонков

0

Я пытаюсь ограничить вызов ng-hide/ng-show. В настоящее время он вызывает функцию getLicense несколько раз, которая будет перегружать браузер.

$scope.getLicense = function( value ) {

    if( $sessionStorage.license === '' ) {
        DashboardService.getLicense( ).then( function( data ) {
            $scope.licenses = data;
            var arr = [ ],
                id = '';
            for( var i in $scope.licenses ) {
                arr.push( [ i ] );
            }
            $sessionStorage.license = arr;
        } );

        for( var cnt = 0; cnt < $sessionStorage.license.length; cnt++ ) {
            if( $sessionStorage.license[ cnt ] == value ) {
                console.log( 'true' );
                return true;
                break;
            } else {
                return false;
                break;
            }
        }
    } else {
            for( var cnt = 0; cnt < $sessionStorage.license.length; cnt++ ) {
            if( $sessionStorage.license[ cnt ] == value ) {
                console.log('true');
            return true;
                break;
            } else {
                console.log('false');
                return false;
                break;
            }
        }

    }

};

Мой код HTML выглядит так:

   <md-list-item class="md-caption" ng-class="{'active': $state.includes('security.webcontrol')}" translate="SIDEBAR.NAV.WEBCONTROL.TITLE"  ng-hide="getLicense('web_control_da')">
Теги:

2 ответа

1

Предоставление функции ng-show/hide/if/etc - очень плохая практика.

Каждый раз, когда вызывается $digest (очень часто), он проверяет каждого наблюдателя, чтобы увидеть, изменилось ли оно. Поэтому вам нужно будет выполнить свою функцию, чтобы узнать, отличается ли результат (или нет).

Добавьте в свою функцию getLicense console.log('function executed') и вы увидите, как часто она вызывается.

Чтобы избежать этого (как объяснил Icycool), вы должны заменить его логическим в своей области. И только измените логическое значение, когда getLicense должен быть протестирован.

Например: Если getLicense нужно вычислять каждый раз $sessionStorage.license изменении $sessionStorage.license (например):

$scope.licence = getLicense();

$scope.watch("$sessionStorage.license", function (newValue, oldValue){
    $scope.licence = getLicense();
});

И в вашем представлении/шаблоне: ng-hide="licence"

Таким образом, он будет выполнять ваш getLicense только тогда, когда это действительно имеет значение.

  • 0
    Вот и все ... Я ожидаю значение от функции, которую я получаю со стороны HTML. который в этом случае "web_control_da"
  • 0
    Я получил ваше первое замечание по поводу звонков. Я заметил, что на самом деле, который я знаю, приведет к краху браузера :( @antoine
Показать ещё 2 комментария
0

Вы можете назначить его переменной области видимости и вместо нее указать ng-hide. Лицензия на проверку звонков в других случаях.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню