将数据传递到另一个范围

时间:2016-04-12 09:56:43

标签: javascript angularjs

这就是我所拥有的:

$http.get("http://localhost/app/api/Suppliers").success(function(response) {
    $scope.dataSource = response;
    console.log($scope.dataSource);
    $scope.safeApply(function() {
        $scope.settings.columns[3] = $scope.dataSource;
    });
}); 


$scope.settings  = {
    colHeaders: ["Code", "Comments"],
    contextMenu : ["row_above","row_below","remove_row"],
    colWidths: [100, 100],
    columns : [
        {   type: 'dropdown',
            source: ['Not Started', 'In Progress', 'Completed']
        },
        {},
        {},
        {   type: 'dropdown',
            source: $scope.dataSource,
        }
    ]
};

问题是$scope.dataSource未定义,它没有显示数据。应该解决这个问题的方法是什么?

更新: 这会在$ http调用中显示数据。但是在我调用source的设置源代码中: $ scope.dataSource 未定义

2 个答案:

答案 0 :(得分:0)

首先,您需要注意,当您声明$scope.settings = {...}时,$http来电还没有结束,所以不要写

{
  type: 'dropdown',
  source: $scope.dataSource,
}

你也可以简单地写一下

{
  type: 'dropdown',
  source: null,
}

然后当$http调用结束时,我假设您要设置此source属性。但是,在您的代码中,您将覆盖整个$scope.settings.columns[3]而不是仅覆盖其source属性。

请改为尝试:

$http.get("http://localhost/app/api/Suppliers").success(function(response) {
  $scope.dataSource = response;
  console.log($scope.dataSource);
  $scope.settings.columns[3].source = $scope.dataSource;
}); 

请注意,我删除了safeApply这是一种反模式。这里$http调用将处理摘要周期。

答案 1 :(得分:0)

找到了答案!

$scope.suppliers = [];

$http.get("http://localhost/i95/api/Suppliers").success(function(data, status, headers, config) {
    for(var i = 0; i < data.length; i++) {
        $scope.suppliers.push(data[i].company);
    }
    console.log($scope.suppliers);
}); 

因此,创建一个全局变量并添加push方法可以解决问题。