angularjs ng-if difference between value and function
26,594
For angular both are expression
, that it evaluates in context of current scope. Angular does this on each digest cycle.
There are more ways to shoot in the foot if you are using the function way. myfunc
could do
$scope.myfunc=function() {
//do some time consuming work
return data;
};
In such a case the binding evaluation on each digest cycle will make your binding and app slow.
So if you are using function based binding make sure that functions return fast by doing minimum processing.
![Whisher](https://i.stack.imgur.com/PZRme.jpg?s=256&g=1)
Comments
-
Whisher almost 2 years
Is there any difference using ng-if with a value or with a function ?
ng-if="myvalue" ng-if="myfunc()"
UPDATE (for a better understanding why I'm asking for)
html
<div class="navbar navbar-default navbar-static-top" data-ng-controller="NavController as nav"> <div class="container"> <ul class="nav navbar-nav"> <a data-ui-sref="home" class="navbar-brand"><i class="logo"></i> Angular Express</a> <li ui-sref-active="active"><a data-ui-sref="home">Home</a></li> </ul> <ul class="nav navbar-nav navbar-right" data-ng-if="!nav.isAuthenticated()"> <li><a data-ui-sref="session.login">Log in</a></li> <li><a data-ui-sref="session.signup">Sign up</a></li> </ul> <ul class="nav navbar-nav navbar-right" data-ng-if="nav.isAuthenticated()"> <li><i class="fa fa-user"></i> <span ng-bind="nav.isAuthenticated().username"></span> <a href="/api/auth/logout" data-ng-click="nav.logout()">Logout</a></li> </ul> </div> </div>
js
function NavController($rootScope, UserStorage){ var nav = this; nav.isAuthenticated = function() { UserStorage.get(); }; } function UserLoginController($rootScope,$state, Users, UserStorage) { var user = this; user.data = {}; user.save = function() { Users.login(user.data).then(function(response) { console.log(response.data); UserStorage.set(response.data); $state.go('home'); }) .catch(function(response) { console.log(response); user.errors = response.data; }); }; }
If I use like this I've got a $digest() iterations reached
RE UPDATE
(for chandermani comment)
function UserStorage($sessionStorage) { return { set: function(data) { $sessionStorage.user = angular.toJson(data); }, get: function() { return angular.fromJson($sessionStorage.user); }, del: function() { delete $sessionStorage.user; } }; }