3 votes

AngularJS dispose-t-il d'un différé natif $rootScope.$apply ?

J'écris beaucoup de code qui ressemble à ça :

obj.bind( 'event', function(){
    $rootScope.$apply( function(){
        somePromise.resolve();
        doSomething();
    }
} );

J'aimerais le comprimer en quelque chose de semblable à :

obj.bind( 'event', deferRootScopeApply( function(){
    somePromise.resolve();
    doSomething();
} );

Il est assez facile d'écrire un service qui fait cela, mais je me demande s'il n'y a pas un moyen plus propre en natif.

3voto

zyklus Points 31683

Pour info, c'est mon service :

app.factory( 'rootApply', [ '$rootScope', function( $rootScope ){
    return function( fn, scope ){
        var args = [].slice.call( arguments, 1 );

        // push null as scope if necessary
        args.length || args.push( null );

        return function(){
            // binds to the scope and any arguments
            var callFn = fn.bind.apply(
                  fn
                , args.slice().concat( [].slice.call( arguments ) )
            );

            // prevent applying/digesting twice
            $rootScope.$$phase
                ? callFn()
                : $rootScope.$apply( callFn )
                ;
        }
    };
} ] );

qui renvoie alors une fonction différée ou qui agit éventuellement comme fn.call :

rootApply( someFunction );
rootApply( someFunction, scope, arg1, arg2, arg3 );

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X