Angularjs 角度-重用代码(服务或控制器)

Angularjs 角度-重用代码(服务或控制器),angularjs,angularjs-service,angularjs-controller,code-reuse,Angularjs,Angularjs Service,Angularjs Controller,Code Reuse,我正在使用Angular为web应用程序开发评论功能。 目前,应用程序中有两个部分供用户评论: 类别 产品 大约90%的评论功能对于这两个部分都是相同的,因此我想让它可重用——即编写一些我可以引用/用作基础的服务或控制器 到目前为止,我的研究似乎指向使用工厂服务,但不幸的是,这似乎不起作用(我花了一整天的时间阅读各种教程) 很可能是我想得太多了,把事情弄得太复杂了,但我真的不知道该怎么办了 下面是我到目前为止的简要概述: 类别的HTML视图 类别的控制器(从服务接收数据并将数据发布到服务,

我正在使用Angular为web应用程序开发评论功能。 目前,应用程序中有两个部分供用户评论:

  • 类别
  • 产品
大约90%的评论功能对于这两个部分都是相同的,因此我想让它可重用——即编写一些我可以引用/用作基础的服务或控制器

到目前为止,我的研究似乎指向使用工厂服务,但不幸的是,这似乎不起作用(我花了一整天的时间阅读各种教程)

很可能是我想得太多了,把事情弄得太复杂了,但我真的不知道该怎么办了


下面是我到目前为止的简要概述:

  • 类别的HTML视图
  • 类别的控制器(从服务接收数据并将数据发布到服务,以便将数据绑定到模型)
  • 类别的服务(检索并存储所有必要的 (数据)
    该产品使用相同的逻辑,服务和控制器中的许多代码将被复制。 我已成功地将两个服务合并为一个服务,但在为控制器执行相同操作时遇到问题
  • 我是否:

  • 编写一个基本控制器,该控制器将与上述服务通信,并将与两个现有控制器连接
  • 编写一个连接到两个现有控制器以及上述服务的工厂/提供者服务

  • 如果使用工厂,可以将所有公共功能放入其返回对象中,并从控制器引用该对象

    工厂

    angular.module('myModule').factory('CommonFunctions', function(){
      return {
        foo : foo,
        bar : bar
      }
    
      function foo(){ 
        console.log('foo'); 
      };
      function bar (){ 
        console.log('bar'); 
      };
    }
    
    控制器

     angular.module('myModule')
            .controller('myController', ['CommonFunctions', function(CommonFunctions) {
        var vm = this;
        vm.foo = CommonFunctions.foo();
        vm.bar = CommonFunctions.bar();
     }
    

    如果使用工厂,可以将所有公共功能放入其返回对象中,并从控制器引用该对象

    工厂

    angular.module('myModule').factory('CommonFunctions', function(){
      return {
        foo : foo,
        bar : bar
      }
    
      function foo(){ 
        console.log('foo'); 
      };
      function bar (){ 
        console.log('bar'); 
      };
    }
    
    控制器

     angular.module('myModule')
            .controller('myController', ['CommonFunctions', function(CommonFunctions) {
        var vm = this;
        vm.foo = CommonFunctions.foo();
        vm.bar = CommonFunctions.bar();
     }
    

    angular的服务类型分离,即:

    • 对于特定值

      • 不变的
      • 价值观
      • (创建其他服务之前所需的特定值的常量)
    • 功能

      • 工厂
      • 服务
      • 提供者
      • (在创建其他服务之前需要服务的特定实例的提供者,通常利用常量)
    允许在控制器和/或指令之间共享数据和处理该数据的方法,任何可以是
    的东西也可以是
    常量
    ,唯一的区别在于它们可以注入的位置。类似地,任何
    服务
    都可以重写为
    工厂
    提供商
    ,决定使用哪种服务的是您的特定用例/您更舒适的书写方式,但实际上最好的思考方法是,如果您有一个需要共享但在
    angular.module.config
    中不需要的值,那么使用
    ,否则使用
    常量
    ,现在如果您有一个想要共享的函数,(可能它以某种方式处理该值,也可能它只是做了其他事情)您应该将其作为工厂编写,然后当您有一些工厂处理该值或其他任何内容时,您可以将它们组合到
    服务中,或者使用提供方配置并组合它们。下面是一个简单的示例(注意,我使用推荐的语法编写angular services):


    我知道这对于一个简单的例子来说有很多,但是angular提供了很多功能,并且有很多使用它们的方法,希望这会有所帮助。

    angular的服务类型分离,即:

    • 对于特定值

      • 不变的
      • 价值观
      • (创建其他服务之前所需的特定值的常量)
    • 功能

      • 工厂
      • 服务
      • 提供者
      • (在创建其他服务之前需要服务的特定实例的提供者,通常利用常量)
    允许在控制器和/或指令之间共享数据和处理数据的方法,任何可以是
    值的东西也可以是
    常量
    ,唯一的区别在于它们可以注入的地方。类似地,任何
    服务
    都可以重写为
    工厂
    提供者
    ,更多的是你的特定用例/你更舒适的写作决定了使用哪一个,但实际上最好的思考方式是如果你有一个需要共享但在
    angular.module.config
    中不需要的值,那么就使用
    value
    ,否则就使用
    constant
    ,如果你有一点乐趣的话你想分享的行为,(可能它以某种方式处理价值,也可能它只是做其他事情)您应该将其作为一个工厂来编写,然后当您有一些工厂处理该值或其他任何内容时,您可以将它们组合成一个
    服务
    ,或者使用提供者来配置和组合它们。下面是一个简单的示例(注意,我使用的是编写angular services的推荐语法):


    我知道这对于一个简单的例子来说是很多的,但是有很多由角提供的特性,以及使用它们的许多方法,希望这有帮助。

    我个人会考虑使用一个正在工作的控制器来启动指令。然后确定哪些部分是不同的,所以你可以将它们定义为属性来传递到指令中。cope.Services可以随时注入到指令中。您可能需要立即传递的几件事情是
    父项
    类型
    。后者将用于我怀疑工厂提供的大多数条件逻辑