Angularjs 在没有超时的情况下无法正常工作的情况



我在angularjs中遇到过只有超时才能解决问题的几种情况。我真的很想了解为什么会发生这种情况,以及如何解决这个问题。

示例:

opLibrary.directive('opClick', function($parse, $location, $timeout, opDebug) {
    return function(scope, element, attrs) {
        var action = attrs.opClick.substring(0, 1) == '/' ? attrs.opClick : $parse(attrs.opClick);
        var event = opDebug.desktop ? 'mousedown' : 'touchstart';
        element.bind(event, function(e) {
            e.preventDefault();
            $timeout(function() {
                if (angular.isFunction(action)) action(scope);
                else $location.path(action);
            }, 0);
        });
    }
});

没有超时$location.path只是不会触发

$.getScript('//connect.facebook.net/en_UK/all.js', function(){
    FB.init({
        appId: 'xxx',
    });
    $timeout(function() {
        $scope.fbInitComplete = true;
    }, 0);
});

没有超时的视图不会基于fbInitComplete更改进行更新,尽管它在视图更改之前进行了更新,就好像变量的值确实发生了更改一样,但作用域并没有捕捉到它

使用$scope.apply而不是超时:

scope.$apply(function() {
    if (angular.isFunction(action)) action(scope);
    else $location.path(action);
});

原因:异步执行某些操作时,例如执行ajax调用时($http为您执行$scope.$apply),您必须通知angular。

相关内容

  • 没有找到相关文章

最新更新