如何将数组值从javascript传递给angularjs控制器

时间:2017-09-06 10:35:14

标签: javascript angularjs angularjs-scope global-variables javascript-objects

我正在尝试传递我从JavaScript文件中获取数组的值,并使用全局变量将其推送到angularJS

在angular文件中,我试图通过访问全局变量来获取这些值 但它让我回到未定义但我跑了

如何在我的控件中访问此值

4 个答案:

答案 0 :(得分:1)

通过上面显示的示例。

  1. 您没有推动globalarray中的值。不调用abc()函数。

  2. 如果您的globalarray变量是全局窗口级别,则可以在角度应用中的任何位置使用它。

  3. 请注意我为演示所做的小提琴的行为。我也做了一个plunk所以你会清楚地理解。

    Fiddle

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

    <强>更新

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

    // 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

    希望现在有所帮助。

答案 1 :(得分:1)

试试这个:

$scope.globalarray = [];

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

}

答案 2 :(得分:1)

看一下这个链接:

AngularJS access scope from outside js function

你可以用不同的方式来考虑它,一旦你有权访问范围,你只需用控制器中的数据调用控制器内的setter方法,然后你可以做任何你需要的事情。我在一个项目中使用了这种方法并且运行良好。

示例:

// externalScope是在角度控制器中声明的全局变量     //这是一种访问控制器并从角度外部触发方法的方法     //我们想要的是发出一些数据已被改变的角度信号,以便它可以做某事。在我的例子中,selectedUserValue是我传递给控制器​​的数据位。

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

此代码位于您尝试使用某些数据调用范围方法的控制器之外

现在在实际控制器中我们有类似的东西:

    var externalScope;

    (function () {
   controller code

控制器中的某个地方:

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

注意externalScope变量是如何在控制器之外声明的,因此它将是全局的。

在此之后只需编码您从外部调用的角度方法中所需的任何代码。

在我的情况下,它是一个setter,然后它会调用另一个利用这些数据的东西:

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

希望这是有道理的。免责声明......这不是我称之为微不足道的东西,只有在你真的没有别的选择时才能使用!

答案 3 :(得分:-2)

全局变量不是一个好主意,也许您需要与另一个Web或框架进行交互。

您是否应该使用全局变量,可以使用index.html中的特殊脚本声明

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

你也可以将globalarray指向窗口的属性

window.globalarray

或$ rootScope。