title: angularjs autosave form is it the right way?
body: <p>My goal is to autosave a form after is valid and update it with timeout.
  I set up like:</p>
  
  <pre><code>(function(window, angular, undefined) {
      'use strict';
      angular.module('nodblog.api.article', ['restangular'])
          .config(function (RestangularProvider) {
              RestangularProvider.setBaseUrl('/api');
              RestangularProvider.setRestangularFields({
                  id: "_id"
              });
              RestangularProvider.setRequestInterceptor(function(elem, operation, what) {
                  if (operation === 'put') {
                      elem._id = undefined;
                      return elem;
                  }
                  return elem;
              }); 
          })
          .provider('Article', function() {
              this.$get = function(Restangular) {
                  function ngArticle() {};
                  ngArticle.prototype.articles = Restangular.all('articles');
                  ngArticle.prototype.one = function(id) {
                      return Restangular.one('articles', id).get();
                  };
                  ngArticle.prototype.all = function() {
                      return this.articles.getList();
                  };
                  ngArticle.prototype.store = function(data) {
                      return this.articles.post(data);
                  };
                  ngArticle.prototype.copy = function(original) {
                      return  Restangular.copy(original);
                  };
                  return new ngArticle;
              }
      })
  })(window, angular);
  
  angular.module('nodblog',['nodblog.route'])
  .directive("autosaveForm", function($timeout,Article) {
      return {
          restrict: "A",
          link: function (scope, element, attrs) {
              var id = null;
              scope.$watch('form.$valid', function(validity) {
                  if(validity){
                      Article.store(scope.article).then(
                          function(data) {
                              scope.article = Article.copy(data);
                              _autosave();
                          }, 
                          function error(reason) {
                              throw new Error(reason);
                          }
                      );
                  }  
              })
              function _autosave(){
                      scope.article.put().then(
                      function() {
                          $timeout(_autosave, 5000); 
                      },
                      function error(reason) {
                          throw new Error(reason);
                      }
                  );
              }
          }
      }
  })
  
  .controller('CreateCtrl', function ($scope,$location,Article) {
          $scope.article = {};
          $scope.save = function(){
              if(typeof $scope.article.put === 'function'){
                  $scope.article.put().then(function() {
                      return $location.path('/blog');
                  });
              }
              else{
                  Article.store($scope.article).then(
                      function(data) {
                          return $location.path('/blog');
                      }, 
                      function error(reason) {
                          throw new Error(reason);
                      }
                  );
              }
          };
       })
  </code></pre>
  
  <p>I'm wondering if there is a best way.</p>