Sunday, 15 January 2012

angularjs - Why isn't $digest automatically being triggered when using $q -



angularjs - Why isn't $digest automatically being triggered when using $q -

i under impression using angular's built-in functions (like $timeout, $q, etc...) triggers $digest automatically. seems works services defined within angular, not defined outside of angular, though utilize $q , exposed via wrapper service. why?

suppose have 2 services same thing:

the first normal js service, uses $q:

var nonangularservice = (function($q){ homecoming { dostuff: { var d = $q.defer() // async function, settimeout, , d.resolve() homecoming d.promise; } } })(angular.injector(["ng"]).get("$q"));

which wrapped angular service injected controllers:

app.factory("nonangularservice", function(){ homecoming nonangularservice; });

the other service same thing, defined within angular service:

app.factory("angularservice", function($q){ homecoming { dostuff: { var d = $q.defer() // async function, settimeout, , d.resolve() homecoming d.promise; } } });

only in sec case $digest called automatically:

nonangularservice.dostuff() .then(function(data) { $scope.data1 = data; $scope.$digest(); // required here }); angularservice.dostuff() .then(function(data) { $scope.data1 = data; // $scope.$digest(); // not required here });

here's plunker

i've never used angular.injector myself, looks $q not 1 passed dynamic dependency injection directive. difference between 2 beingness 1 triggers $digest when resolved, while other triggers promise then phone call during next digest cycle.

i've set little alter in code trying understand (the difference beingness pass $q in parameter instead of getting via angular.injector).

http://plnkr.co/edit/zgjfwuviz4iidvxd0hre?p=preview

this may come alter in version of angular when decided $q should handle digest cycle itself. guess interesting discuss straight developpers on github or google groups.

ps: getnonangularservice becomes service agree, point more prove $q different.

angularjs angularjs-service

No comments:

Post a Comment