Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.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 尝试访问AngularJS$scope变量时未定义_Javascript_Angularjs_Node.js - Fatal编程技术网

Javascript 尝试访问AngularJS$scope变量时未定义

Javascript 尝试访问AngularJS$scope变量时未定义,javascript,angularjs,node.js,Javascript,Angularjs,Node.js,我正在编写一个带有AngularJS前端的Electron(node.js)应用程序。由于node.js在操作系统级别运行,Angular在客户机级别运行,因此这两个节点使用IPC(或者在本例中,使用IPC实现)相互通信 在本例中,我有一个服务,用于向节点应用程序发送IPC消息: app.service('msgService', ['ipc', '$rootScope', '$q', function(ipc, $rootScope, $q){ this.sendMsg = funct

我正在编写一个带有AngularJS前端的Electron(node.js)应用程序。由于node.js在操作系统级别运行,Angular在客户机级别运行,因此这两个节点使用IPC(或者在本例中,使用IPC实现)相互通信

在本例中,我有一个服务,用于向节点应用程序发送IPC消息:

app.service('msgService', ['ipc', '$rootScope', '$q', function(ipc, $rootScope, $q){
    this.sendMsg = function(type, value) {
        var message = {
            type: type,
            value: value
        };

        ipc.send(message);
    };
}]);
此服务被注入主控制器,并由控制器调用:

app.controller('mainController', ['$scope', '$rootScope', 'electron', 'msgService', 'hey', function($scope, $rootScope, electron, msgService, hey){

    msgService.sendMsg('db_find', {});

    // I can see the variable inside this console.log
    console.log($rootScope);

    // I get undefined here
    console.log($rootScope.msg);

}]);
msgService.sendMsg('db_find', {});

$rootScope.$on("electron-msg", (event, msg) => {
    // message done
    console.log(msg);
});
节点应用程序生成请求后,会通过ipc发送一条消息,然后由Angular应用程序的.run部分中的一段代码提取该消息:

app.run(['$window', '$rootScope', function($window, $rootScope) {

    $rootScope.$on('electron-msg', (event, msg) => {
        $rootScope.msg = msg;
    });

}]);
上面只是在run中的$rootScope变量上设置了一个msg属性,然后我希望能够从控制器内部访问它。您将从console.log行上的注释中注意到,我可以访问$rootScope并返回该值,但是当我尝试单独记录$rootScope.msg时,会得到“undefined”。如果试图从$rootScope.msg变量中设置一个变量,也会出现这种情况-我得不到定义

我已经用这个试了所有的方法,我已经筋疲力尽了

非常感谢您的帮助:)

编辑:

下面是console.log($rootScope)的输出;应要求:

Scope {$id: 1, $$childTail: ChildScope, $$childHead: ChildScope, $$prevSibling: null, $$nextSibling: null…}
$$ChildScope
    :
        ChildScope()
$$applyAsyncQueue
    :
        Array[0]
$$asyncQueue
    :
        Array[0]
$$childHead
    :
        Scope
$$childTail
    :
        Scope
$$destroyed
    :
        false
$$isolateBindings
    :
        null
$$listenerCount
    :
        Object
$$listeners
    :
        Object
$$nextSibling
    :
        null
$$phase
    :
        null
$$postDigestQueue
    :
        Array[0]
$$prevSibling
    :
        null
$$watchers
    :
        Array[2]
$$watchersCount
    :
        99
$id
    :
        1
$parent
    :
        null
$root
    :
        Scope
msg
    :
        Array[4]
notificationCount
    :
        0
notifications
    :
        Array[0]
online
    :
        true
__proto__
    :
        Object

抱歉格式错误!但是你可以在$rootScope中看到msg

似乎electron库异步触发了这些消息,这导致在您进行日志记录时,
$rootScope.msg
尚未填充

当然,您可以在控制器中收听事件:

app.controller('mainController', ['$scope', '$rootScope', 'electron', 'msgService', 'hey', function($scope, $rootScope, electron, msgService, hey){

    msgService.sendMsg('db_find', {});

    // I can see the variable inside this console.log
    console.log($rootScope);

    // I get undefined here
    console.log($rootScope.msg);

}]);
msgService.sendMsg('db_find', {});

$rootScope.$on("electron-msg", (event, msg) => {
    // message done
    console.log(msg);
});

当然,这也会捕获通过ipc服务发送的任何其他消息。

似乎electron库异步触发这些消息,这导致在您进行日志记录时,
$rootScope.msg
尚未填充

当然,您可以在控制器中收听事件:

app.controller('mainController', ['$scope', '$rootScope', 'electron', 'msgService', 'hey', function($scope, $rootScope, electron, msgService, hey){

    msgService.sendMsg('db_find', {});

    // I can see the variable inside this console.log
    console.log($rootScope);

    // I get undefined here
    console.log($rootScope.msg);

}]);
msgService.sendMsg('db_find', {});

$rootScope.$on("electron-msg", (event, msg) => {
    // message done
    console.log(msg);
});

尽管这当然也会捕获通过ipc服务发送的任何其他消息。

如评论中所述,@Adam Thomason在尝试console.log后遇到调用异步函数的问题。为了确保他在函数执行后使用他想要的数据,下面的代码为他工作

angular.element(document).ready(function () {
    console.log('Hello World');
});

希望它对其他人也有帮助=)

正如评论中所讨论的,@Adam Thomason在尝试console.log后遇到了调用异步函数的问题。为了确保他在函数执行后使用他想要的数据,下面的代码为他工作

angular.element(document).ready(function () {
    console.log('Hello World');
});


希望它对其他人也有帮助=)

请显示
console.log($rootScope)
…为什么不能在控制器中使用app.run部分代码?是否有可能
ipc.send
是异步的?请尝试console.log(msg);在$rootScope内。$on,只是看看函数是否被调用一次或两次……是的,当然这会使它有所不同。可能是您在触发异步事件之前记录了
$rootScope.msg
。您可以通过在
$timeout(function(){//log},1000)中包装日志来测试它
请显示
console.log($rootScope)
…为什么不能在控制器中使用app.run部分代码?是否有可能
ipc.send
是异步的?请尝试console.log(msg);在$rootScope内。$on,只是看看函数是否被调用一次或两次……是的,当然这会使它有所不同。可能是您在触发异步事件之前记录了
$rootScope.msg
。您可以通过在
$timeout(function(){//log},1000)中包装日志来测试它然后如何从index.html中访问此变量,例如在ng repeat中?我已经试过了,在设置$scope.allSites之后,实际上没有从“所有站点中的站点”中得到任何东西。你可以在任何视图中通过在你的HTML中使用
$root.msg
来访问
$rootScope
属性。这太棒了,我不知道。但是,我仍然有点不确定如何在ng repeat中访问$root.msg-可能吗?我尝试了ng repeat=“thing in$root.msg”,但在第一次签出
$root.msg
是什么时,没有运气。是数组吗?对不起,我不喜欢发牢骚,但似乎其他用户刚刚复制了我的评论,他的回答完全没有用/与此无关。所以我很好奇为什么你接受他的答案?然后我如何从index.html中访问这个变量,例如在ng repeat中?我已经试过了,在设置$scope.allSites之后,实际上没有从“所有站点中的站点”中得到任何东西。你可以在任何视图中通过在你的HTML中使用
$root.msg
来访问
$rootScope
属性。这太棒了,我不知道。但是,我仍然有点不确定如何在ng repeat中访问$root.msg-可能吗?我尝试了ng repeat=“thing in$root.msg”,但在第一次签出
$root.msg
是什么时,没有运气。是数组吗?对不起,我不喜欢发牢骚,但似乎其他用户刚刚复制了我的评论,他的回答完全没有用/与此无关。所以我很好奇为什么你接受他的答案?我用这个函数设置了$scope.allSites变量,然后我想在html文件中访问它,但是在ng repeat中我没有收到任何数据。$rootScope变量可以直接在html中访问,如:ng repeat=“current\u msg in$root.msg”知道如何在ng repeat中访问$root.msg吗?我差一点就能让它工作了!如果$root.msg确实是一个数组,那么它应该可以工作,检查这个fiddle我使用这个函数设置了$scope.allSites变量,然后我想在html文件中访问它,但是在ng repeat中我没有收到任何数据。$rootScope变量可以在html中直接访问,就像这样:ng repeat=“current_msg in$root.msg”知道如何在ng中访问$root.msg吗-