2013-05-28 30 views
23

Rotalar arasında veri kaydetmenin en iyi yolu ne olurdu?
Bu yüzden 4 adım içeren bir form var ve bir önceki adıma geçmek için bir sonraki adıma geçmek istiyorum.AngularJS - rotalar arası veri kaydetme

Şu anda çalışıyor, verileri kaydetmek için bir "hizmet" kullanıyorum. Ancak sorun, bir "hizmet" in tekil olduğu, formdan uzaklaşıp ona geri döndüğünden beri, bir önceki eksik veya terk edilmiş formdaki tüm verilere sahip olacağıdır.

Bu tür bir durumu çözmek için iyi bir yol var mı?

+1

olası yinelenen: Form adım denetleyicileri için bir Veli Kontrolörü gibi bir şey varsa, o denetleyicisi, rota değişikliği üzerinde bir saat tutabilir /stackoverflow.com/questions/13882077/angularjs-passing-scope-between-routes) –

cevap

2

Services Uygulamalarınızı hayatı boyunca devam edecek
Tee, teşekkür ederiz. Yani herhangi bir sorun yaşamamalısınız. Yapmanız gereken tek şey bir Service oluşturmak ve ona erişmesi gereken denetleyicilere enjekte etmektir. Mesela, kontrolörlere User servisini enjekte ettim.

Her bir güzergahınız için farklı denetleyicileri kullanın, böylece modelinizin kapsamı geçersiz sayılmaz.

ilk yol için

İlk kontrolör,

app.controller("FirstPageController", function($scope,User){ 
    $scope.user = User; 
    $scope.user.firstName = "Emre"; 
    $scope.user.secondName = "Nevayeshirazi"; 
}); 
ikinci yol için

İkinci denetleyici,

app.controller("SecondPageController", function($scope,User){ 
    $scope.user = User; 
    $scope.user.age = 24; 
}); 
+4

Bu kötü bir çözüm olurdu. Formlar genellikle kullanıcı bunları doldurmaya çalıştığında verileri içermez. Soruya göre, bir kullanıcı bir formu doldurduğunda, formu teslim eder ve aynı formu tekrar doldurmak için geri gelir, kullanıcı eski form verileriyle sunulmamalıdır. Çözümünüz, kullanıcının burada beklediği gibi olmayan form alanları için varsayılan değerlere sahip olmayı öneriyor. – callmekatootie

+0

Ayrıca, verileri görünümden eşlemek yerine, denetleyicideki verileri geçersiz kılmayı planladığınızda, hizmeti neden çağırmalısınız? – callmekatootie

29

Neden ne zaman saklanan verileri silme bakmak hizmeti geliştirmeye yoktur:

  • Kullanıcı formu tamamlamıyor ve form gönderme işleminin tümünden uzaklaşıyor
  • kullanıcı aşağıdaki gibi Hizmetinizi arttırabilir,

Temelde formu gönderir:

myApp.factory('myService', function() { 
    var formData = {}; 

    return { 
     getData: function() { 
      //You could also return specific attribute of the form data instead 
      //of the entire data 
      return formData; 
     }, 
     setData: function (newFormData) { 
      //You could also set specific attribute of the form data instead 
      formData = newFormData 
     }, 
     resetData: function() { 
      //To be called when the data stored needs to be discarded 
      formData = {}; 
     } 
    }; 
}); 

aşağıdaki gibi denetleyicisi sonra olabilir:

myApp.controller('FirstStepCtrl', ['$scope', 'myService', function ($scope, myService) { 
    //This is the controller of the first step in the form 
    //Reset the data to discard the data of the previous form submission 
    myService.resetData(); 

    //Remaining Logic here 
}]); 

myApp.controller('LastStepCtrl', ['$scope', 'myService', function ($scope, myService) { 
    //This is the controller of the last step in the form 

    //Submits the form 
    $scope.submitForm = function() { 
     //Code to submit the form 

     //Reset the data before changing the route - assuming successful submission 
     myService.resetData(); 

     //Change the route 
    }; 

    //Remaining Logic here 
}]); 

Başka bir alternatif olmaktır Yol, form uygulamasında olmayan bir şeye dönüştüğünde hizmetin resetData() işlevini çağırır. /: (Http [yolları arasındaki kapsamını geçen angularjs] arasında

$scope.$on('$routeChangeStart', function() { 
    //Use $location.path() to get the current route and check if the route is within the 
    //form application. If it is, then ignore, else call myService.resetData() 

    //This way, the data in the forms is still retained as long as the user is still 
    //filling up the form. The moment the user moves away from the form submission process, 
    //for example, when explicitly navigating away or when submitting the form, 
    //the data is lost and no longer available the next time the form is accessed 
}); 
+0

Teşekkürler @callmekatootie. Evet, şu anda aklımda olan resetData fonksiyonuna sahip olmak.Yolları takip etmem gerektiğini biraz rahatsız ettim. Ben açısal bir çift şablon ekleme yapmak mümkün olacağını düşünüyorum, yani html etiketinde bir denetleyici varsa, rotadan bağımsız olarak devam eder. Bu durumda, rota değiştiğinde yeniden yüklenmeyecek bir ana denetleyicim var, ancak aynı zamanda her bir adım için alt denetleyiciye sahipler. Bunun mümkün olup olmadığını bilmiyorum. – teepusink