2017-04-27 10 views
2

サービスを介してビューのデータを取得していて、angular.copy()を使用してローカル変数に割り当てています。

var init = function() { 
     $scope.product = angular.copy(EditItemFactory.getSelectedItem()); 

    } 

View of my UI after calling init function

$scope.UpdateItem = function (data) { 
     console.log(data); 
     var Data = DataFactory.UpdateItem(data); 

     if (parseInt(Data) != 0) { 

      $modalInstance.dismiss('Close'); 
     } else { 
      console.log(Data); 
     } 
    } 

私は、DB内のアイテムや店舗を更新する更新機能を渡しています。

しかし、DBに更新後のデータはここでUI

に更新されているが、私のコントローラの完全なコードです:

(function() { 

var productEditCtrl = function ($scope, $modalInstance, EditItemFactory, DataFactory) { 




    $scope.cancel = function() { 
     $modalInstance.dismiss('Close'); 
    }; 

    $scope.UpdateItem = function (data) { 
     console.log(data); 
     var Data = DataFactory.UpdateItem(data); 

     if (parseInt(Data) != 0) { 

      $modalInstance.dismiss('Close'); 
     } else { 
      console.log(Data); 
     } 
    } 

    var init = function() { 
     $scope.product = angular.copy(EditItemFactory.getSelectedItem()); 

    } 

    init(); 
} 
productEditCtrl.$inject = ['$scope', '$modalInstance', 'EditItemFactory', 'DataFactory'] 
angular.module("SplitWise").controller("productEditCtrl", productEditCtrl)()) 

私はUIの変更をバインドする方法を取得しておりません。

注:私は後にのみ更新されたデータをDBにに格納されて

データファクトリーコードUIを更新する:

(function(){ 

var DataFactory = function($http) 
{ 
    var factory = {}; 




    factory.getAllItems = function() 
    { 
     return $http.get("http://localhost:8080/GetAllItems") 
    } 

    factory.DeleteItem = function(Product) 
    { 

     $http.post("http://localhost:8080/DeleteItem",{"Model":Product.MODEL_NUMBER}).success(function(data){ 
      return data; 
     }).error(function(err) 
       { 
      return err; 
     }) 
    } 

    factory.UpdateItem = function(Product) 
    { 

     $http.post("http://localhost:8080/UpdateItem",{"Model":Product.MODEL_NUMBER,"Name":Product.NAME,"MSRP":Product.MSRP,"Quantity":Product.QUANTITY}).success(function(Data){ 
      return Data; 
     }).error(function(err){ 
      return err; 
     }) 
    } 
    return factory 
} 
DataFactory.$inject=['$http'] 
angular.module('SplitWise').factory("DataFactory",DataFactory) 

}())

+3

シェアあなたのコード:

var DataFactory = function($http) { // ... factory.UpdateItem = function(Product) { return $http.post("http://localhost:8080/UpdateItem",{"Model":Product.MODEL_NUMBER,"Name":Product.NAME,"MSRP":Product.MSRP,"Quantity":Product.QUANTITY}); } // ... } 

そして、このようなUpdateItem関数を使用します。 HTTP呼び出しを行っている場合は、非同期であるため、 'var Data = DataFactory.UpdateItem(data)'だけにすることはできません。 – tanmay

+0

hi @tanmay datafactoryのコードを更新しました – user3597404

答えて

0

$http.postが非同期であるので、 UpdateItem関数はサーバから受信する前にDataを返します。したがって、undefindedです。あなたがしたいことは、それがうまく割り当てられるまで待ってから、それを使って何かをすることです。 DataFactory` `ため

$scope.UpdateItem = function (data) { 
    console.log(data); 
    DataFactory.UpdateItem(data).then(function(resp) { 

     if (parseInt(resp.data) != 0) { 

      $modalInstance.dismiss('Close'); 
     } else { 
      console.log(resp); 
     } 
    }, function(err) { 
     console.log(err); 
    }); 
} 
+1

'$ http'は、 '$ q.defer()'で新しいものを作る必要はありません。 – Phix

+1

ああ、そうだよ。それはさらに簡単になります。答えを更新しました。 – nocodename

関連する問題