2015-12-22 4 views
3

У меня есть директива, которая определяет функцию innerBarStyle() на стадии линии связи и связывает его с областью: Цикл обработки AngularJs запускается после вызова любой функции?

restrict : 'EA', 
scope: { 
    values: '='    
}, 
link: function(scope, elements, attributes){ 
    scope.innerBarStyle = function(value){ 
    console.count("innerBarStyleCounter"); 
    return { 
     width: 10px; 
    }; 
    }), 
templateUrl: 'template.html' 
}; 

Функция не делает ничего, кроме подсчета количества раз он запускается на выполнение и возвращает объект.

Теперь, в шаблоне директивы шаблона, я вызываю эту функцию с помощью выражения. Что-то вроде <div ... ng-style=innerBarStyle(someValueInCurrentScope)><div>

То, что я получаю на практике, это бесконечный цикл, который вызывает повторную вызов вышеупомянутой функции. После некоторых исследований я обнаружил, что это обычно происходит, когда вызываемая функция неявно или явно запускает цикл дайджеста (например, если он использует службу $ http). Но в этом случае функция действительно ничего не делает. Возможно ли, что цикл дайджеста запускается где-то в другом месте или я что-то упускаю? BTW, я знаю, что были бы лучшие способы добиться того же результата, мне просто интересно, как все работает здесь.

+0

Можете ли вы опубликовать свои директивы? – dfsq

+1

Если вы используете '$ watch' без прослушивателя, вы узнаете, когда происходит' 'digest''. – user3632710

+0

@dfsq Извините, что не могу. Это код моей компании. Позвольте мне добавить некоторые детали, хотя. –

ответ

1

Без просмотра фактического кода (я понимаю, вы не можете опубликовать точный код, так как это для вашей работы) Я могу только догадываться. Но я думаю, что происходит то, что вы настраиваете стиль элемента посредством возврата $scope. innerBarStyle, который запускает директиву ng-style, которая вызывает цикл дайджеста, который снова запускает функцию области видимости. Ergo - непрерывное выполнение этой логики.

Чтобы исправить это, вы, вероятно, должны использовать API angular.element в директиве elem, чтобы настроить CSS.

 Смежные вопросы

  • Нет связанных вопросов^_^