javascript
  • angularjs
  • 2013-01-24 20 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。

    相关问题