【问题标题】:Use Two Factories AngularJS使用两个工厂 AngularJS
【发布时间】:2014-11-28 09:52:21
【问题描述】:

我想了解在AngularJS中使用两个工厂并基本上从另一个工厂调用一个是否适用。

考虑这个场景:

我有一个工厂返回一个数组。这个工厂应该验证填充这个数组的数据是否已经在本地 SQL 存储中

如果 TRUE 则将此数据返回给我的控制器。

如果 FALSE 它应该调用另一个使用来自 RESTful API 的数据的工厂。然后它将这个数据写入 WebSQL DB 并最终返回这个数据。

此设计是否遵循标准软件模式?我很难将 AngularJS 技术应用到我的项目中......

【问题讨论】:

    标签: javascript angularjs factory


    【解决方案1】:

    将一个服务/工厂/提供者注入另一个服务/工厂/提供者是完全可以的。

    这是一个很好的答案,何时使用哪个 - AngularJS: Service vs provider vs factory

    在这种特殊情况下,我会将您的服务用作 SQL 服务和 API 服务。控制器只注入 SQL 服务并在那里发送数据。 SQL 服务然后确定如何处理数据,如果需要,它会从 API 服务请求额外的数据,这些数据应该首先返回承诺并在解析时返回数据。当 SQL 服务完成后,无论是否调用 API 服务,它都会将数据返回给控制器。再次最好使用承诺模式。控制器根本不需要了解 API。

    【讨论】:

    • 顺便说一句,我提供了“服务与供应商与工厂”SO 问题的答案:)
    【解决方案2】:

    两个工厂使用彼此的服务并没有错。

    【讨论】:

      【解决方案3】:

      AngularJS 带有一个内置的依赖注入机制,这就是共享资源,比如在你的情况下,你希望 2 个工厂相互使用我在这里举一个简单的例子,如何做到这一点 这是你的角度脚本

      var app = angular.module('yiiframe-factoryApp', ['ngRoute']);
       app.factory("myFactory1", function() {
          return "Controller";
      });
      
      app.factory("myFactory2", function(myFactory1) {
          return "factory" + myFactory1;
      });
      function factoryController($scope, myFactory2) {
          $scope.ctrlName = myFactory2;
      }
      

      这是你的观点

      <div ng-app="yiiframe-factoryApp" class="container">
          <div ng-controller="factoryController" class="page-content">
              <div class="modal-dialog">
                  <div class="modal-content">
                      <div class="modal-header">
                          <h3 class="modal-title">Angularjs Factory example</h3>
                      </div>
                      <div class="modal-body">
                          {{ctrlName}}
                      </div>
                  </div>
              </div>
          </div>
      </div>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-12
        • 1970-01-01
        • 1970-01-01
        • 2014-06-28
        • 1970-01-01
        • 2012-12-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多