【问题标题】:How to pass variable to a function call in angular forEach如何在角度forEach中将变量传递给函数调用
【发布时间】:2015-02-17 12:56:27
【问题描述】:

我正在使用传单指令在 openStreet 地图上显示地图。要列出所有标记,我的代码如下所示:

$scope.goTo = function() {
    restAPI.getSomething().success(function(data) {
        var anArray = data.lists;
        console.log(anArray);
        var anotherList = {};
        angular.forEach(anArray, function(value, key) {
            if (value.geolocation) {
                $scope.project = value;
                anotherList[anArray[key].ao] = {
                    lat: value.lat,
                    lng: value.lng,
                    focus: false,
                    draggable: false,
                    icon: icon,
                    message: '<button type="button" ng-click="openProject(project)">' + value.ao + '</button> {{project.ao}}',
                    clickable: true
                }
            }
        });
        $scope.map.anotherList = anotherList;
    });
}

在该消息模板中,我正在添加一个带有函数调用的按钮,据我所知,要在模板中传递一个变量,Scope 是解决方案,但在这里,所有标记上 value.ao 名称都不同,但 project.ao 是一样的……(为什么????)

当我点击每个标记时,它在数组(anArray)中打开最后一个项目。

如何在每次迭代中绑定范围值?,这样我就可以在每个标记上打开正确的项目

【问题讨论】:

  • 你应该把$scope.project变成一个数组,这样在forEach循环的每次迭代中你可以分配一个不同的值(即$scope.project[key]=value),然后在你的消息字符串中使用它作为出色地。否则,您的 $scope.project 在逻辑上将指向数组中的最后一个元素,正如您所描述的那样。这确实是你编程的。
  • 嗨 Edwin,感谢您抽出宝贵时间,我将投影更改为数组,但在消息字符串中使用该键值时我有点迷失了,我尝试过类似 project(key),它不起作用跨度>
  • 我想它一定是ng-click='openProject(project[' + key + '])'。这样它就会产生一个像'openProject(project[0])' 这样的字符串,并在下一次迭代中产生'openProject(project[1])' 等等。您必须确保键(即数组索引)在特定迭代的字符串中硬编码。

标签: javascript angularjs angularjs-scope angular-leaflet-directive


【解决方案1】:

我的工作解决方案如下所示:

$scope.goTo = function() {
    restAPI.getSomething().success(function(data) {
        var anArray = data.lists;
        console.log(anArray);
        var anotherList = {};
        $scope.project = {};
        angular.forEach(anArray, function(value, key) {
            if (value.geolocation) {
                $scope.project[key] = value;
                anotherList[anArray[key].ao] = {
                    lat: value.lat,
                    lng: value.lng,
                    focus: false,
                    draggable: false,
                    icon: icon,
                    message: '<button type="button" ng-click="openProject('+key+')">' + value.ao + '</button> {{project.ao}}',
                    clickable: true
                }
            }
        });
        $scope.map.anotherList = anotherList;
    });
}

$scope.openProject = function(key){
   var project = $scope.project[key];
   // this is how i got correct project
}

感谢 Edwin 指出传递键值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-03
    • 2016-10-23
    相关资源
    最近更新 更多