Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript angular.element(..).scope()返回未定义的初始值_Javascript_Angularjs_Angularjs Scope - Fatal编程技术网

Javascript angular.element(..).scope()返回未定义的初始值

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

我正在尝试访问控制器外部的角度控制器范围。我正在使用一个外部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>

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库,回调就会自动触发。似乎我需要找出其他方法来实现这一点。尝试使用承诺,并在我上面发布的控制器事件中解决承诺。在回调中,将所需代码放入该承诺的
,然后
,然后在控制器初始化时执行代码。这有意义吗?能够让它工作起来。谢谢你的帮助!