Angularjs 角度-重用代码(服务或控制器)
我正在使用Angular为web应用程序开发评论功能。 目前,应用程序中有两个部分供用户评论:Angularjs 角度-重用代码(服务或控制器),angularjs,angularjs-service,angularjs-controller,code-reuse,Angularjs,Angularjs Service,Angularjs Controller,Code Reuse,我正在使用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可以随时注入到指令中。您可能需要立即传递的几件事情是父项
和类型
。后者将用于我怀疑工厂提供的大多数条件逻辑