2013-03-15 21 views
6

silmek $ kullandıktan sonra görünümü güncelleyerek bu kaynak: Ben templates modele bağlı bir tablo buna denir görünümdeneden değil şöyle bir denetleyici var benim açısal uygulamasında yöntem

function TemplateListControl($scope, TemplateService){ 
    $scope.templates = TemplateService.get(); // Get objects from resource 

    // Delete Method 
    $scope.deleteTemplate = function(id){ 
     $scope.templates.$delete({id: id}); 
    } 
} 

. aşağıdaki gibi:

<table ng-model="templates"> 
    <thead> 
     <tr> 
      <th style="width:40%">Title</th> 
      <th style="width:40%">controls</th> 
     </tr> 
    <thead> 
    <tbody> 
     <tr ng-repeat="template in templates"> 
      <td> 
       <!-- Link to template details page --> 
       <a href="#/template/[[template.id]]"> 
        [[template.title]] 
       </a> 
      </td> 
      <td> 
       <!-- Link to template details page --> 
       <a class="btn btn-primary btn-small" 
        href="#/template/[[template.id]]">Edit 
       </a> 
       <!-- Link to delete this template --> 
       <a class="btn btn-primary btn-small" 
        ng-click="deleteTemplate(template.id)">Delete 
       </a> 
      </td> 
     </tr> 
    </tbody> 
</table> 

Şimdi yukarıdaki şablondan silme bağlantıyı tıkladığınızda, O deleteTemplate yöntemini çağırır ve başarılı DELETE çağrı DİNLENME API yapılır. Ancak görünüm yenilenene ve $scope.templates = TemplateService.get(); yeniden başlatılıncaya kadar güncellenmez. Neyi yanlış yapıyorum?

cevap

1

Ayrıca sen $ kaynağına bir geri çağırma işlevi geçebileceği şekilde

ng-click="deleteTemplate($index)"> 


$scope.delete = function (idx) { 
    var templateid = $scope.templates[idx]; 

    API.Deletetemplate({ id: templateid.id }, function (success) { 
    $scope.templates.splice(idx, 1); 
    }); 
}; 
+0

yardım eder ve REST api'ye eşzamansız çağrının başarılı olup olmadığını nasıl anlarız? Eminim açısal kaynak, görünümü kendi başına uygun şekilde güncellemelidir. Verileri müşteri tarafında güncellememiz gerekiyorsa, elle işlemeyi de gerçekleştirmemiz gerekecek, ki bu benim için ters yöne gitmek gibi görünüyor. – Amyth

+0

Küfürü paylaşabilir misiniz lütfen –

0

altında böylece kaynak kodunu değiştirmek istemci tarafında güncellemeniz gerekir. Eğer $

function TemplateListControl($scope, TemplateService){ 
    $scope.templates = TemplateService.get(); // Get objects from resource 

    // Delete Method 
    $scope.deleteTemplate = function(id){ 
    TemplateService.$delete({id: id}, function(data) { 
     $scope.templates = data; 
    }); 
    } 
} 

Dikkat silmek senin REST APIs delete işlevi ayarlamanız gereken bir dizi döndürür isArray: AngularJS $ kaynak hatalarını önlemek için Angular $ kaynağınızda true - TypeError: Object # yönteminde 'push' yöntemi yoktur

$resource(URL, {}, { 
    delete: {method:'DELETE', isArray: true} 
}); 
3

yerine geri arama vaat kullanmayı tercih ediyoruz. Vaatler, asenkron işlemlerin üstesinden gelmenin yeni yoludur. Sonucu sunucudan döndükten sonra bir söz vererek denetleyebilirsiniz.

//Controller 
myApp.controller('MyController', 
    function MyController($scope, $log, myDataService) { 

$scope.entities = myDataService.getAll(); 
$scope.removeEntity = function (entity) {  
     var promise = myDataService.deleteEntity(entity.id); 
     promise.then(
      // success 
      function (response) { 
       $log.info(response); 
       if (response.status == true) { 
        $scope.entities.pop(entity); 
       } 
      }, 
      // fail 
      function (response) { 
       $log.info(response); 
       // other logic goes here 
      } 
     ); 
    }; 
}); 

//DataService 
myApp.factory('myDataService', function ($log, $q, $resource) { 

return { 
    getAll: function() { 
     var deferred = $q.defer(); 
     $resource('/api/EntityController').query(
      function (meetings) { 
       deferred.resolve(meetings); 
      }, 
      function (response) { 
       deferred.reject(response); 
      }); 

     return deferred.promise; 
    }, 

    deleteEntity: function (entityId) { 
     var deferred = $q.defer(); 
     $resource('/api/EntityController').delete({ id: entityId}, 
      function (response) { 
       deferred.resolve(response); 
      }, 
      function (response) { 
       deferred.reject(response); 
      }); 

     return deferred.promise; 
    } 
    }; 
}); 

//Web API Controller 
public class MeetingController : BaseApiController 
{ 
    // .... code omited 

    public OperationStatus Delete(int entityId) 
    { 
     return _repository.Delete(_repository.Single<MyEntity>(e => e.EntityID == entityId)); 
    } 
} 

Not: $ günlüğü, $ q $ kaynak hizmetlerinde inşa edilir. Umarım,

İlgili konular