我正在尝试在控制器外访问我的角控制器的范围。我正在使用执行某些操作并完成的外部JS库执行某些回调。在一个回调中,angular.element(document.findElementById('elementId').scope()
返回undefined
。但是在第一个之后执行的第二个回调中 angular.element(document.findElementById('elementId').scope()
返回有效范围。
这是一些示例代码
<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
,然后是onCallback2
。var scope
在onCallback1
中未定义,但在onCallback2
为什么scope
在onCallback1
中未定义?
谢谢您的帮助
这似乎是一个计时问题。执行第一个回调时,范围尚未准备就绪,但在您的第二个回调中。当正确加载关联的视图时,您应该更改逻辑并触发控制器中的回调。
在您的authentication controller中添加以下内容:
$scope.$on('$viewContentLoaded', function(){
// here define/fire your callbacks and you will be sure that everything is init
});
我希望它能有所帮助