Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.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中查看窗口变量_Javascript_Angularjs - Fatal编程技术网

Javascript 如何从AngularJS中查看窗口变量

Javascript 如何从AngularJS中查看窗口变量,javascript,angularjs,Javascript,Angularjs,我有一组窗口变量,我想绑定到AngularJS中的范围变量 以下是我到目前为止的代码,但它不起作用: .directive('watchGlobals', function() { return { link: function(scope, element, attrs) { var watchGlobals = attrs.watchGlobals.split(',');

我有一组窗口变量,我想绑定到AngularJS中的范围变量

以下是我到目前为止的代码,但它不起作用:

        .directive('watchGlobals', function() {
            return {
                link: function(scope, element, attrs) {
                        var watchGlobals = attrs.watchGlobals.split(',');
                        for (var i = 0; i < watchGlobals.length; i++) {
                            scope[watchGlobals[i]] = window[watchGlobals[i]];
                        }
                }
            }
        });
.directive('watchGlobals',function(){
返回{
链接:函数(范围、元素、属性){
var watchGlobals=attrs.watchGlobals.split(',');
对于(var i=0;i
这样做的最佳方式是什么?我试图避免使用setInterval。我希望在更新窗口变量时更新作用域。有没有一种方法可以像这样从AngularJS中查看窗口变量?

使用一个简单的js pubsub(例如),您可以在AngularJS服务中订阅它。另一个应用程序应该通过pubsub发布,它将调用服务中的调用。该服务将更新angular应用程序

angular.factory('connectService', ['$rootScope', function($rootScope) {

    var token = PubSub.subscribe( 'TOPIC_NAME', function(msg, data) {
        $rootScope.$apply(function() {
            $rootScope.$broadcast('TOPIC_NAME', { msg: msg, data: data });
        });
    });

}]);
现在,您可以从其他应用程序发布数据:

PubSub.publish( 'MY TOPIC', 'hello world!' );
现在,无论何时,只要您想要获取角度使用的数据:

$scope.$on('TOPIC_NAME', function(data) {
    console.log(data.msg, data.data); // do whatever you want to do with the data
});

正如评论所说,有很多方法可以做到这一点,推送数据可能比听数据要好

您可以在angular中使用一个简单的钩子,在现有指令的作用域上调用
$digest
。然后,使用函数返回window属性的当前值,而不是像当前一样查看变量值。这样,如果值是简单类型(字符串、数字)或被替换,您就不会丢失手表:

/***角度代码***/
angular.module('myApp',[])
.controller('ctrl',function(){})
//注入标准的angular$window服务(实际上只是窗口对象)
.directive('watchGlobals',函数($window){
返回{
链接:函数(范围、元素、属性){
//向原始DOM元素添加一个方法,JS可以调用该方法来更新范围
元素[0]。外部更新=函数(){
范围。$digest();
};
var watchGlobals=attrs.watchGlobals.split(',');
//循环,但使用IIFE隔离变量名
对于(var i=0;i

有棱角的
x:{xVal}}

y:{{yVal}}

JS X:一套


Y:Set

你为什么要这样做?我试图在一个应用程序中观察变量,并在另一个应用程序中使用它们。从原始JavaScript到AngularJS,你的另一个应用程序是AngularJS应用程序吗?它不是AngularJS应用程序-它是原始JavaScript为什么不从另一个代码而不是EE中间人调用控制器?这是一个外部数据,我通常将外部资源包装在一个服务中,这是一个单例服务,在应用程序生命周期内不会被破坏。。如果适合您的口味,您可以在控制器中执行此操作。如果使用
$compileProvider.debugInfoEnabled(false),则此方法存在问题-使用
angular.element(document.getElementById('angular-hook')).scope()无法从外部angular获取作用域。