2017-05-31 296 views
-1

我想訪問我的角度控制器的範圍以外的控制器。我正在使用外部js庫執行某些操作,並在完成時執行某些回調。在其中一個回調angular.element(document.findElementById('elementId').scope()返回undefined。 但是在第一個 angular.element(document.findElementById('elementId').scope()返回有效範圍之後執行的第二個回調中。angular.element(..)。scope()首先返回undefined

下面是一些示例代碼

<body id="authcontroller" ng-controller="AuthenticationController as auth"> 

<script> 
    window.externalLibObj = { 
    onCallback1: function(){ 
     // Undefined value for scope 
     var scope = angular.element(document.getElementById('authcontroller')).scope(); 
    }, 
    onCallback2(): function(){ 
     // Valid value for scope 
     var scope = angular.element(document.getElementById('authcontroller')).scope(); 
    } 
    }; 
</script> 
    </body> 

其中這些回調的執行順序是onCallback1然後onCallback2var scope未定義在onCallback1但爲什麼在onCallback1未定義scopeonCallback2

的值?

感謝您的幫助

+0

你也可以說是調用這些回調的代碼? –

+0

@PeterLaBanca調用這些回調的代碼在js lib加載後自動執行,我從不明確調用調用這些回調的代碼 –

+0

這兩個回調是否立即執行?這聽起來像是一個時間問題,在第二次回調被調用之前,範圍還沒有準備好。 –

回答

0

這似乎是一個計時問題。當你的第一個回調被執行時,範圍沒有準備好,但是它在你的第二個回調中。當關聯視圖正確加載時,您應該更改邏輯並觸發控制器內的回調。

在你AuthenticationController補充一點:

$scope.$on('$viewContentLoaded', function(){ 
    // here define/fire your callbacks and you will be sure that everything is init 
}); 

我希望它能幫助

+0

不幸的是,我不能控制回調何時被觸發,因爲它們一旦被自動觸發js lib我正在使用負載。似乎我需要找出一些其他方式才能使其發揮作用。 –

+0

嘗試使用承諾並解決我在上面發佈的控制器事件中的承諾。在你的回調中,你需要的代碼放在那個promise的'then'中,當控制器初始化的時候你將會執行你的代碼。是否有意義? – quirimmo

+0

能夠得到它的工作。感謝你的幫助! –