Javascript angular.element(..).scope()返回未定义的初始值
我正在尝试访问控制器外部的角度控制器范围。我正在使用一个外部js库,它执行某些操作,并在完成时执行某些回调。在其中一个回调中Javascript angular.element(..).scope()返回未定义的初始值,javascript,angularjs,angularjs-scope,Javascript,Angularjs,Angularjs Scope,我正在尝试访问控制器外部的角度控制器范围。我正在使用一个外部js库,它执行某些操作,并在完成时执行某些回调。在其中一个回调中angular.element(document.findElementById('elementId')).scope()返回undefined。 但是在第一次回调之后执行的第二次回调中 angular.element(document.findElementById('elementId').scope()返回有效的作用域 下面是一些示例代码 <body
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>
window.externalLibObj={
onCallback1:function(){
//范围的未定义值
var scope=angular.element(document.getElementById('authcontroller')).scope();
},
onCallback2():函数(){
//作用域的有效值
var scope=angular.element(document.getElementById('authcontroller')).scope();
}
};
执行这些回调的顺序是onCallback1
,然后onCallback2
var范围
在onCallback1
中未定义,但在onCallback2
中有一个值
为什么onCallback1
中未定义范围
感谢您的帮助这似乎是一个时间问题。在执行第一次回调时,作用域尚未准备好,但它在第二次回调时。您应该更改逻辑,并在正确加载关联视图后在控制器内触发回调
在AuthenticationController中添加以下内容:
$scope.$on('$viewContentLoaded', function(){
// here define/fire your callbacks and you will be sure that everything is init
});
我希望这会有帮助你能展示调用这些回调的代码吗?@PeterLaBanca调用这些回调的代码在加载js库后会自动执行,我从不显式调用调用这些回调的代码,两个回调都会立即执行?这听起来像是一个时间问题,范围还没有准备好直到调用第二个回调为止。@PeterLaBanca是的,在库完成加载时执行回调,首先执行回调1,然后以顺序方式执行回调2。不幸的是,我无法控制何时触发回调,因为一旦加载了我使用的js库,回调就会自动触发。似乎我需要找出其他方法来实现这一点。尝试使用承诺,并在我上面发布的控制器事件中解决承诺。在回调中,将所需代码放入该承诺的,然后,然后在控制器初始化时执行代码。这有意义吗?能够让它工作起来。谢谢你的帮助!