Javascript 角度控制器:逻辑作为方法还是添加到范围?
假设我以前有一个函数没有通过API公开,现在我决定公开该函数(在我的测试覆盖率案例中)Javascript 角度控制器:逻辑作为方法还是添加到范围?,javascript,angularjs,Javascript,Angularjs,假设我以前有一个函数没有通过API公开,现在我决定公开该函数(在我的测试覆盖率案例中) 将我想要的对象作为$scope的属性放在控制器构造函数之外,与控制器上的this.propertyName相比,有哪些参数可以将它们作为属性放在控制器构造函数之外?唯一的逻辑区别是,许多东西都可以访问$scope,但并非所有东西都可以访问控制器的上下文。控制器只是一个标准的Javascript构造函数,因此任何可能将其称为的函数都可以访问中定义的内容。但是HTML模板不能:它们只能看到$scope上定义的内容
将我想要的对象作为$scope的属性放在控制器构造函数之外,与控制器上的
this.propertyName
相比,有哪些参数可以将它们作为属性放在控制器构造函数之外?唯一的逻辑区别是,许多东西都可以访问$scope
,但并非所有东西都可以访问控制器的上下文。控制器只是一个标准的Javascript构造函数,因此任何可能将其称为的函数都可以访问中定义的内容。但是HTML模板不能:它们只能看到$scope
上定义的内容。因此,标准是(大致):
控制器:对HTML模板、指令等共享的内容使用$scope
。对本地访问的组件使用此
,或仅在非常有限的情况下使用,如测试线束(如果有)
指令:对HTML模板或其他指令/控制器共享的任何内容使用$scope
。避免使用此
服务:使用此
处理您希望对外公开的所有内容。为其他所有内容定义本地(私有)变量
筛选:避免将属性/方法暴露在外部。过滤器不应该以这种方式使用。这两种方式都是可行的,并且都会起作用,公认的(标准)方式是$scope