2013-12-13 146 views
1

我在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變化,雖然它只是查看變化之前更新如果變量的值確實發生變化,但範圍沒有發現它

回答

3

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

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

原因:當執行Ajax調用($http確實$scope.$apply你)當事情是異步完成的,例如,你必須通知角。

+0

非常感謝!這解釋了一切:) – kosmo

+0

@kosmo歡迎:) – karaxuna

相關問題