Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS是否有本机延迟$rootScope.$apply?_Javascript_Angularjs - Fatal编程技术网

Javascript AngularJS是否有本机延迟$rootScope.$apply?

Javascript AngularJS是否有本机延迟$rootScope.$apply?,javascript,angularjs,Javascript,Angularjs,我写了很多这样的代码: obj.bind( 'event', function(){ $rootScope.$apply( function(){ somePromise.resolve(); doSomething(); } } ); 我想把它压缩成类似于: obj.bind( 'event', deferRootScopeApply( function(){ somePromise.resolve(); doSomething

我写了很多这样的代码:

obj.bind( 'event', function(){
    $rootScope.$apply( function(){
        somePromise.resolve();
        doSomething();
    }
} );
我想把它压缩成类似于:

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

编写这样的服务很容易,但我只是想知道是否有一种更干净的本地方式。

FWIW,这是我的服务:

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 )
                ;
        }
    };
} ] );
然后返回一个延迟函数或可选地执行类似于
fn.call的操作

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