簡體   English   中英

在Angular.js中的控制器之間共享未保存的$ resource

[英]Sharing unsaved $resource between controllers in Angular.js

我有一個主頁,鼓勵用戶注冊服務。 主頁上只有幾個輸入要填寫。 新用戶提交這些字段后,它們將與其余必填輸入一起進入主注冊頁面。 我在填寫主要注冊頁面上已提供的輸入時遇到問題。

我讀過,在模板之間傳輸數據的最佳方法(甚至不更改此控制器)是使用服務。 我正在使用服務,但它們是$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);
    };
  } 
]);

嘗試創建服務來管理此步驟

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}
    }
}])

這個答案的幫助下,我決定處理資源和持久工廠的最佳方法是將資源分離到自己的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);
    };
  } 
]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM