2016-08-16 91 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的狀態。