如何将来自http json的数据放入新的范围变量[angularJS]

时间:2015-08-19 02:39:19

标签: javascript json angularjs

我写了一个 $ http.get 函数来提取存储在数据库中的数据。

我想在AngularJS的下拉函数中使用数据库数据。现在这意味着我必须创建一个新的 $ scope JSON数据变量并将实际数据库数据存储在其中,以便我可以在我的HTML页面中访问它。

<select popover="Choose your input drug, type to filter list of drugs" data-ng-model="currentData"
    data-ng-options="name for name in ourDataName" style="width:300px;" convert-to-number >
</select>
ourDataName中的{p> data-ng-options是我在控制器中定义为$scope.ourDataName的变量,它应该包含所有药物名称。我可以在下面的get函数中写入内容;然而,问题在于有超过100种药物名称:

$http.get(URL).success(function (data) {  //Note URL is where I stored my database. I did not put it for privacy reasons
    $scope.ourDataName = 
        [
            data[1].drug_name,
            data[2].drug_name,
            data[3].drug_name
        ]   
});

我试图在JSON数据上放置一个for循环:

for(var i=0; i<100;i++)
{
    $scope.ourDataName = 
    [
        data[i].drug_name
    ]   
}

问题是它最终只显示了第100个药物名称,因为它显示了循环结束的内容。

我没有解决方案。有没有办法循环遍历数据库并将它们存储在一个新的变量中,而不必像我最初那样检查每个变量?

2 个答案:

答案 0 :(得分:3)

您无需为下拉列表创建其他数据集。

直接使用http返回的数据。

试试这个

<强>控制器

$http.get(URL).success(function (data) {        //Note URL is where I stored my database. I did not put it for privacy reasons
   $scope.ourDataName=data;
});

查看

<select popover="Choose your input drug, type to filter list of drugs"  data-ng-model="currentData"
   data-ng-options="name.drug_name for name in ourDataName" style="width:300px;" convert-to-number >
</select>

答案 1 :(得分:1)

Anik的回答很棒。但是如果你想使用循环选项,你可以在控制器中使用以下代码。

var targetExp = Expression.Parameter(typeof(Citizen), "rootobject");
var valueExp = Expression.Constant("\"StrozeR\"");
var valueExp2 = Expression.Constant(1765116);
var fieldExp = Expression.Property(targetExp, "name");
var fieldExp2 = Expression.Property(targetExp, "id");
var assignExp = Expression.Equal(fieldExp, valueExp);
var assignExp2 = Expression.Equal(fieldExp2, valueExp2);
var predicateBody1 = Expression.AndAlso(assignExp, assignExp2);

var queryableType = typeof(System.Linq.Queryable);
var whereMethod = queryableType.GetMethods()
       .First(m =>
       {
           var parameters = m.GetParameters().ToList();
           //Put more restriction here to ensure selecting the right overload                
           //the first overload that has 2 parameters
           return m.Name == "Where" && m.IsGenericMethodDefinition &&
                 parameters.Count == 2;
       });
var whereClause = Expression.Lambda<Func<Citizen, bool>>(predicateBody1, 
                  new ParameterExpression[] { targetExp });
var genericMethod = whereMethod.MakeGenericMethod(typeof(Citizen));
var newQuery = (IQueryable<Citizen>)genericMethod
              .Invoke(genericMethod, new object[] { queryableDataaa, whereClause });