2014-11-21 3 views
0

Я следую за «контроллером как» с использованием angularjs styleguide, чтобы создать контроллер, который имеет функцию, которую он должен вызывать из вида (например, ng-if). Однако, когда я вызывал функцию, кажется, ее называли три раза, но я понятия не имею, как это произошло. Вот JSBin linkфункции с шаблоном ControllerAs вызываются несколько раз

(function() { 
 
    angular.module('app', []); 
 

 
    function test() { 
 
    console.log('init'); 
 
    var vm = this; 
 
    vm.title = "test title"; 
 
    vm.called = function() { 
 
     console.log('get called'); 
 
    } 
 
    } 
 

 
    angular 
 
    .module('app') 
 
    .controller('test', test); 
 

 
})();
<!DOCTYPE html> 
 
<html ng-app="app"> 
 

 
<head> 
 
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.2/angular.min.js"></script> 
 
    <meta charset="utf-8"> 
 
    <title>JS Bin</title> 
 
</head> 
 

 
<body> 
 
    <div ng-controller="test as vm"> 
 
    {{ vm.title }} {{ vm.called(); }} 
 
    </div> 
 
</body> 
 

 
</html>

ответ

0

Вы не контролируете, сколько раз выражения, используемые в {{binding}} с оцениваются. AngularJS переоценивает их каждый раз, когда думает, что их ценности могут измениться. Другими словами, если выражение содержит вызов функции, оно вызывается на каждом $digest.

Это означает, что вы должны быть очень обеспокоен воздействием на производительность при использовании вызовов функций в выражениях AngularJS. Обычно возможно (и намного лучше) связываться с переменной области. Если у вас это было в большом приложении, где чаще вызывалось $rootScope.$digest, вы бы увидели еще много вызовов этой же функции.

+0

Очень чистый ответ! Благодаря! –

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