2014-03-14 32 views
0

我想檢索angularjs控制器中的每個主題的成績列表,以將它傳遞給我的REST API。我使用一串逗號分隔的成績測試了代碼,它運行良好,現在我正在尋找從用戶動態獲得成績。目前我只接受逗號分隔的成績在我的API中。我怎樣才能迭代生成動態角度級選項的所有主題列表?如何將選定的值從UI存儲到控制器中的數組?

$http.jsonp("http://localhost/api/cgpa/"+ "a1,a2,e1,c2,e1,c1" +"?callback=JSON_CALLBACK") // callback is necessary for jsonp to initiate .sucess function 
    .success(function(data, status, headers, config) { 
     $scope.data = 'Your CGPA is ' + data.cgpa; 
    }) 
    .error(function(){ 
     $scope.data = 'Error'; 
    }); 

Calculator

也請建議我如果我可以通過angularjs實現這種功能通過「添加主題」按鈕添加的對象數量限制?

Add item

+0

我知道我在單個問題中問得太多,但是如果您可以提供一些我可以參考的鏈接,那就太棒了。我是新角色,不熟悉要搜索的術語。 – user2714639

回答

1

你有幾個選擇:

1)使用功能NG重複註冊 「點擊」 元素:

app.controller('AppCtrl', ['$scope', 'yourService', function($scope, yourService){ 
    $scope.selected = []; 

    yourService.fetch(function(items){ 
    $scope.items = items; 
    }); 

    $scope.select = function(item){ 
    var index; 
    if ((index = $scope.selected.indexOf(item)) !== -1){ 
     $scope.selected.splice(index, 1); // remove already existing, aka toggle 
    } else { 
     $scope.selected.push(item); 
    } 
    } 

    $scope.isSelected = function(item){ 
    return $scope.selected.indexOf(item) > -1; 
    } 

    $scope.calculate = function(){ 
    var items = []; 
    for(var i = 0, len = $scope.selected.length; i < len; i++){ 
     items.push($scope.selected[i].value); 
    } 
    yourService.jsonp(items.join(',')); 
    } 
}); 
<div ng-repeat="item in items"> 
    <div ng-click="select(item)" ng-class="{'isSelected':isSelected(item)}">{{ your item data }}</div> 
</div> 

2)把一個「狀態「

app.controller('AppCtrl', ['$scope', 'yourService', function($scope, yourService){ 
    yourService.fetch(function(items){ 
    for(var i = 0, len = items.length; i < len; i++){ 
     items[i].selected = false; 
    } 
    $scope.items = items; 
    }); 

    $scope.calculate = function(){ 
    var items = []; 
    for(var i = 0, len = $scope.items.length; i < len; i++){ 
     if ($scope.items[i].selected) { 
     items.push($scope.items[i].value); // this could be done with .reduce or .map, but it's not cross-browser 
     } 
    } 
    yourService.jsonp(items.join(',')); 
    } 
}); 
<div ng-repeat="item in items"> 
    <div ng-click="item.selected=!item.selected" ng-class="{'isSelected':item.selected}">{{ your item data }}</div> 
</div> 

3)你可以(也應該)集中所有的選擇/取消/在你的服務提交數據,而不是把它都在你的控制範圍,這樣你可以重用的代碼,通常是很好的做法

4)另一種方法是爲每個按鈕創建一個隔離的示波器指令,但我認爲這對您正在嘗試完成的操作來說過於矯枉過正

基本上,您的用戶界面總是反映您的數據,而不是反過來。

相關問題