1

在使用ng-show更改$ scope變量後,我必須在元素上綁定js事件。

當我改變範圍後,我運行JS腳本,但Js比角速度快,他錯過了發現一些尚未通過ng-show顯示的div。

這是一個針對這個問題的一些代碼示例的蹲點。我發現這種問題的辦法是做JS代碼在setTimeout的,但我需要一個乾淨的解決方案:https://plnkr.co/edit/iYDs552yCyd3R7ivgD84?p=preview

$scope.start = function(){ 
    $scope.showMap=true; 

    setTimeout(function(){ 
    jsFunc(); 
    },1000); 
} 
+0

您需要在範圍變量上添加一個手錶:https://www.sitepoint.com/mastering-watch-angularjs/ –

+0

正如您在plunker中可以看到的那樣,我只是按照您所說的編輯它,但並未解決問題,watch函數被調用的時間稍早於angularjs所做的dom更改 – SWahi

回答

1

使用$timeout服務:

$scope.start = function(){ 
    $scope.showMap=true; 
    /* 
    setTimeout(function(){ 
    jsFunc(); 
    },1000); 
    */ 
    //Use $timeout 
    $timeout(jsFunc); 
} 

$timeout服務集成與AngularJS消化週期。

由於Leaflet API是AngularJS框架的外部,因此瀏覽器需要$ timeout來呈現DOM並執行Leaflet API代碼。請參閱AngularJS $timeout Service API Reference

+0

另一種方法是使用指令,如[Angular-UI ui-leaflet](https://github.com/angular-ui/UI-小冊子)。 – georgeawg

+0

是的,我已經嘗試過,但它是非常有限的,特別是對於一些特定的需求。 – SWahi