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