javascript
  • angularjs
  • 2013-01-24 23 views 0 likes 
    0

    我有一堆在我的數據庫「活動」的:如何在AngularJS中單擊後更新模型?

    {"name" : "Apple", "status" : "active"} 
    {"name" : "Orange", "status" : "paused"} 
    

    我展示他們的角與:

    <span ng-switch on="campaign.status"> 
    <a ng-switch-when="active" ng-click='setStatus($index, "paused")'>Pause</a> 
    <a ng-switch-when="paused" ng-click='setStatus($index,"active")'>Activate</a> 
    </span> 
    

    然後在我控制我使用更新服務器的數據庫狀態一個API(其返回更新條目的JSON。

    $scope.setStatus = function(index, newstatus) { 
    
        var item = $scope.campaigns[index]; 
        var url = 'api.mysite.com/' + newstatus + '/' + item._id.$oid; 
    
        if (! $scope.isComplete(item)) 
        { 
         $http({method: 'GET', url: url}). 
         success(function(data, status, headers, config) { 
          $scope.campaigns[index] = data; 
          }). error(function(data, status, headers, config) { 
          console.log('Error communicating with the server.'); 
          }); 
        } 
    } 
    

    其中變量campaigns是從檢索到的所有廣告活動的陣列服務器當控制器與初始化:

    $scope.connection = $resource('api.mysite/getallcampaigns'); 
    $scope.campaigns = $scope.connection.query(); 
    

    這似乎是非常的混亂已經和我敢肯定,我使用AngularJS正確:(最主要的是,我傳遞到控制器的索引我正在修改的元素,如果我重新排列數組,它會中斷。我怎樣才能讓Angular爲我打好這根線?什麼是最小和正確的方法來做到這一點?

    +0

    您可以使用indexOf。檢查這個例子。 http://jsfiddle.net/KNM4q/113/ – SunnyShah

    回答

    0

    將廣告系列傳遞到setStatus()而不是索引。修改成功回調中的廣告系列屬性:

    <a ng-switch-when="active" ng-click='setStatus(campaign, "paused")'>Pause</a> 
    

    $scope.setStatus = function (campaign, newstatus) { 
        ... 
        success(function(data, status, headers, config) { 
         campaign.status = data.status; 
    

    不要在成功回調中重新分配整個數組 - 這可能會破壞您視圖中的數據綁定。
    也就是說,我認爲這不會起作用:campaign = data

    您可能可以定義一個$資源對象,它可以處理獲取初始數據數組和修改單個數組項。請參閱$resource API page上的「信用卡資源」示例。注意數組cards(它被分配query()的結果)的每個項目也可以是$ save()d。

    相關問題