在Angular.js中的控制器之间共享未保存的$资源

时间:2014-07-08 01:43:25

标签: javascript angularjs angular-ui-router angularjs-service angularjs-resource

我有一个鼓励用户注册服务的主页。主页只有几个输入要填写。在新用户提交这些字段后,它们将被带到主注册页面,其中包含其余所需的输入。我在填写主注册页面上已提供的输入时遇到问题。

我已经读过在模板之间传输数据的最佳方法(甚至不更改控制器)是使用服务。我正在使用服务,但它们是$resource服务,我无法弄清楚如何在模板之间保留未保存的$resource我无法保存$resource,因为它还没有所有必需的信息。

路由 - 使用angular-ui路由器

app.config(function($stateProvider, $urlRouterProvider) {

  $urlRouterProvider.otherwise('/');

  $stateProvider
    .state('welcome', {
      url: '/',
      templateUrl: 'views/welcome.html',
      controller: 'CompanyCtrl'
    })
    .state('registerAccount', {
      url: '/account/register',
      templateUrl: 'views/account/register.html',
      controller: 'CompanyCtrl'
    });
});

服务 - 公司&管理器

angular.module('app')
  .factory('Company', ['$resource', function ($resource) {
    return $resource('http://localhost:3000/api/v1/company/');
  }]);

angular.module('app')
  .factory('Manager', ['$resource', function ($resource) {
    return $resource('http://localhost:3000/api/v1/managers');
  }]);

控制器

angular.module('app')
.controller('CompanyCtrl', ['Company', 'Manager',
  function (Company, Manager) {
    this.company = new Company();
    this.manager = new Manager();

    this.create = function() {
      var params = {
        company: this.company,
        manager: this.manager
      };

      Company.save(params);
    };
  } 
]);

2 个答案:

答案 0 :(得分:0)

尝试创建服务以管理此步骤

angular.module('app').factory('ServiceRegisterManager' ['$resource', 'Company', 'Manager', function($resource, Company, Manager){
    var steps: []
    return {

        saveTemporaryStep: function(step, data){
            steps[step] = data
        }

        someValidateion: function(){...}

        callMeOnFinalStep: function(){//Save your full data}
    }
}])

答案 1 :(得分:0)

this answer的帮助下,我决定了处理这两种资源的最佳方法。持久性工厂是将资源分成他们自己的API工厂,释放我的模型工厂供我使用,但是我喜欢。

API工厂

angular.module('app')

.factory('Api', ['$resource',
 function($resource) {
  return {
    Company: $resource('http://localhost:3000/api/v1/company/'),
    Manager: $resource('http://localhost:3000/api/v1/managers')
  };
}]);

经理&公司没有$ resource

angular.module('app')

.factory('Manager', function () {
  return {};
})


.factory('Company', function () {
  return {};
});

更新控制器

angular.module('app')

.controller('CompanyCtrl', ['Company', 'Manager', 'Api',
  function (Company, Manager, Api) {
    this.company = Company;
    this.manager = Manager;

    this.create = function() {
      var params = {
        company: this.company,
        manager: this.manager
      };

      Api.Company.save(params);
    };
  } 
]);