1

我试图通过其我从JavaScript文件数组获取值,并通过使用一个全局变量如何从javascript传递数组值angularjs控制器

在角文件它推到angularJS,我试图通过访问像 全局变量来获取这些值,但它返回我不确定,但是我跑了

我怎么能在我的控制研究访问此值

+3

如果变量是全局变量(我的意思是窗口级全局变量),那么它在您的应用程序中的任何位置都可用,包括您的控制器内部。 –

+1

首先,abc函数声明是错误的,你在{ – Kalamarico

+2

@ v.josh之前忘记了()你可以发布[** Minimal,Complete和Verifiable示例**](https://stackoverflow.com/help/mcve )?既然这样'var globalarray = [];函数abc(){var array1 = [4,5]; globalarray.push(数组1)}; ABC(); (function(){console.log(globalarray [0]);})();'会给出正确的输出:'[4,5]'。 –

回答

-2

全局变量是不是一个好主意,也许你需要与其他互动网页或框架。

是你应该乌斯一个全局变量,你可以在index.html的一个特殊的脚本声明

<script type="text/javascript">  
let globalarray; 
</script> 

你也可以ASIGN的globalarray到窗口的属性

window.globalarray 

或者$ rootScope。

+0

我已经试过这一个$ scope.globalarray = $ window.globalarray; console.log($ scope.globalarray)但仍未定义。并且当我检查了console.log(globalarray.length)的长度时,它将返回0,但是console.log(globalarray)返回给我2值 –

1

通过上面显示的示例。

  1. 您不推送globalarray中的值。通过不呼叫abc()功能。

  2. 如果您的globalarray变量是窗口级别的全局变量,它将在您的角度应用程序中的任何地方可用。

请观察我演示过的小提琴的行为。我也做了一个plunk所以你会清楚地理解。

Fiddle

var globVar = [12 ,33]; 
var myApp = angular.module('myApp', []);  
myApp.controller('MyController', function($scope) {  
    $scope.globVar = globVar; 
}); 

更新

由于数据进来,你需要重新运行摘要周期和更新变量的回调。请注意这个小提琴,因为它有你的坐标init。

// we got the cords 
var cords = ol.proj.transform(coordinates, 'EPSG:3857', 'EPSG:4326'); 

// we get the scope from the element that has the controller binded to it. 
var scope = angular.element(document.getElementById("MainWrap")).scope(); 

// we call a digest cycle of angular to update our scope variable sinse it comes in a callback when angular is loaded 
scope.$apply(function() { 
    scope.updateCords(cords); 
}); 

Working Fiddle

现在希望它帮助。

+0

@ v.josh请参阅更新后的答案和附带的小提琴。我试图尽可能描述性。 –

+0

可以请你检查一下我已更新的plunker然后你可以得到我想要的确切想法 –

+0

@ M.JunaidSalaat不推荐使用'scope()'方法,并且[在生产中运行时]不会工作(https:/ /docs.angularjs.org/guide/production)用'$ compileProvider.debugInfoEnabled(false);'。 –

1

试试这个:

$scope.globalarray = []; 

function abc() { 
    var array = [4,5] 
    angular.forEach(array,function(k,v){ 
    $scope.globalarray.push(k); 
    }) 

} 
1

看看这个链接:

AngularJS access scope from outside js function

,你可以用不同的方式简单地想起来了,一旦你进入范围,你使用数组中的数据在控制器内调用setter方法,然后可以执行所需的任何操作。我在项目中使用了这种方法,效果很好。

例如:

// externalScope是在角CONTROLER声明的全局变量 //这是从的角度 外部访问控制器和触发方式的方式//我们想要的是通知有些数据已被改变,所以它可以做一些事情。在我的例子中,selectedUserValue是我传递给控制器​​的数据位。

if (externalScope) { 
    externalScope.$apply(function() { 
     externalScope.selectUser(selectedUserValue); 
    }); 
} 

这个代码存在wherver你试图调用范围的方法有一些数据在控制器外部

现在的实际控制人,我们有这样的事情:

var externalScope; 

    (function() { 
    controller code 

某处控制器:

externalScope = $scope; //this exposes the scope to the outside world 

请注意externalScope变量的声明方式控制器以外的红色,所以它将是全球性的。

之后,只需在外部调用的角度法中使用任何需要的代码即可。

在我的情况

这是一个二传手,然后调用别的东西,这使得使用该资料:

$scope.selectUser = function (userID) { 
      if (userID && userID !== $scope.selectedUserID) { 
       $scope.selectedUserID = userID; 
       $scope.loadUserRecords(); 
      } 
     }; 

希望这是有道理的。免责声明......这不是我称之为微不足道的事情,只有在你没有其他选择的情况下才能使用!

+0

我已经尝试过使用$ apply functron,但它仍然不能正常工作,请你检查我已经更新的plunker。 –

相关问题