2016-08-16 94 views
0

这里抓具体的数据是什么,API将返回的图片:AngularJS - 从JSON数组

enter image description here

我试图创建抢“当前审批人”和“状态”变量这个数组。如果“Current Approver”与本地存储中存储的用户名相匹配,并且“Status”为“REJECTED”,那么我想运行一行jquery。

以下是我有:

$http.get(API + '/car'). 
success(function(data) { 
    $scope.myCars = data; 
    console.log(data); 

    var originator = $scope.myCars["My CARs"]["Current Approver"], 
     status = $scope.myCars["My CARs"].Status, 
     user = localStorage.getItem('user') || null 

    // Check if logged in user is originator and CAR is "REJECTED" 
    if (originator === user && status === 'REJECTED') { 
    $('#termCar').css('display', 'block'); 
    } 

}); 

下面是HTML:

<div ng-repeat="car in myCars['My CARs']" class="myCar"> 
    <div class="carId">{{ car['Display Name'] }}</div> 
    <div class="title">{{ car['Project Title'] }}</div> 
    <div id="termCar" class="termCar"><a ui-sref="taskDetails">Terminate</a></div> 
</div> 

我知道它有什么用这些行做的(显然):

originator = $scope.myCars["My CARs"]["Current Approver"], 
status = $scope.myCars["My CARs"].Status 

我只是不知道如何从数组中提取特定数据。

我需要能够遍历对象数组,并找到满足if语句的那些,然后如果其中一个确实会运行jQuery线。

感谢您的任何帮助。

回答

0

尝试:

originator = $scope.myCars["My CARs"][0]["Current Approver"]; 
status = $scope.myCars["My CARs"][0].Status 

你根本就没有引用您希望从抓住其值指数在数组中。

0

你是对的,问题是这样的:

$scope.myCars["My CARs"]["Current Approver"] 

对于工作,你的数据结构必须是这样的:

"My CARS": { 
    "Current Approver": "..." 
} 

My CARs是对象的数组,所以你需要迭代该数组。您通常会使用基本的forEach来做到这一点。 Lodash使这个漂亮的事,但我会用原生JS:

var user = localStorage.getItem('user'); 
$http.get('/car').success(function(data) { 
    var cars = data['My CARs']; 
    cars.forEach(function(car) { 
    if (car["Current Approver"] === user && car.Status === 'REJECTED') { 
     // do stuff 
    } 
    }); 
}); 
0

你需要数组My CARs滤镜来适应本地用户

$http.get(API + '/car').success(function(data) { 
    $scope.myCars = data; 
    console.log(data); 
    var user = localStorage.getItem('user') || null; 
    var originator = $scope.myCars["My CARs"].filter(function(d) { 
     return d["Current Approver"] === user && d["Status"] === 'REJECTED' 
    }); 

    if (originator.length) { 
     $('#termCar').css('display', 'block'); 
    } 
}); 
0

试试这个:

var cars = $scope.myCars["My CARs"]; 
for(int i = 0; i < cars.length; i++) { 
    var theCar = cars[i]; 
    if(theCar["Current Approver"] === user && theCar["Status"] === "REJECTED") { 
     originator = theCar["Current Approver"]; 
     status = theCar.Status; 
     break; 
    } 
} 

这会给你第一辆车匹配Current Approver匹配user的状态。