Confused When Filter is evaluate In angularJS -


filter in template

using filter in view template reevaluate filter on every digest angular document.

even when value of expression not changing still reevaluating(or input filter not changing). know each expression watcher set. during digest loop check change in expression value if yes fire watcher. , expression reevaluate.but why filter reevaluate on every digest when input not changing.

the filter function should pure function, means should stateless , idempotent. angular relies on these properties , executes filter when inputs function change. angular doc.

earlier revaluate on every digest in second bold text whenever input change.what diffference between two. https://docs.angularjs.org/guide/filter

update

i made reverafilter

app.js file

angular.module('todoapp')     .filter('reversa', function() {         return function(input, condition) {             input = input || '';             var out = '';             (var = 0; < input.length; i++) {                 out = input.charat(i) + out;             }             return out;         };     })     .controller('mainctrl', function($scope, reversafilter) {           $scope.todo = '';         $scope.text = 'shriyansh';         //  $scope.text = reversafilter($scope.text);       }); 

partial html

<div class="container">     <h2>my todos</h2>     <input type="text" ng-model="todo">     <div>{{text|reversa}}</div> </div> 

i put breakpoint inside return functon of filter. when ever changing value of todo variable execution filter code also. put filter text not todo.

the angular $digest() loop special mechanism angular able use provide two-way binding capabilities 1 of it's signature features.

essentially, angular creates $watch() every variable used in expression or filter. whenever watched item changes, $digest() loop fires, , evaluates properties on scope. during $digest, expressions re-evaluated, filters re-calculated, , dom updated reflect changes.

if change in 1 variable triggers different variable change (for example: {{a + b = c}} cause c change if a or b changed), change second variable triggers new $digest occur, evaluate if changes impact other variables, , on. $digest loop "stable" once there no further changes variables being watched.

filters have re-evaluated in $digest loop well, since possible 1 of changes way filter sorted, parameters being used in filter, or actual list being filtered. if $digest loop did not handle these possibilities, filter not able react two-way binding in fluid manner.

this becomes important filter functions idempotent. if filter has side effects, these side effects put $digest endless loop. $digest cycle caught in position every change causes change causes change, perpetually.

the $digest loop has breakout point, , throw error 10 iterations reached , cease continue processing if encounters potential endless loop. also, in attempt further keep being issue, filter function itself executed if inputs change. while filter being evaluated, not being executed every cycle, unless necessary.


Comments

Popular posts from this blog

toolbar - How to add link to user registration inside toobar in admin joomla 3 custom component -

linux - disk space limitation when creating war file -

How to provide Authorization & Authentication using Asp.net, C#? -