Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度控制器:逻辑作为方法还是添加到范围?_Javascript_Angularjs - Fatal编程技术网

Javascript 角度控制器:逻辑作为方法还是添加到范围?

Javascript 角度控制器:逻辑作为方法还是添加到范围?,javascript,angularjs,Javascript,Angularjs,假设我以前有一个函数没有通过API公开,现在我决定公开该函数(在我的测试覆盖率案例中) 将我想要的对象作为$scope的属性放在控制器构造函数之外,与控制器上的this.propertyName相比,有哪些参数可以将它们作为属性放在控制器构造函数之外?唯一的逻辑区别是,许多东西都可以访问$scope,但并非所有东西都可以访问控制器的上下文。控制器只是一个标准的Javascript构造函数,因此任何可能将其称为的函数都可以访问中定义的内容。但是HTML模板不能:它们只能看到$scope上定义的内容

假设我以前有一个函数没有通过API公开,现在我决定公开该函数(在我的测试覆盖率案例中)


将我想要的对象作为$scope的属性放在控制器构造函数之外,与控制器上的
this.propertyName
相比,有哪些参数可以将它们作为属性放在控制器构造函数之外?

唯一的逻辑区别是,许多东西都可以访问
$scope
,但并非所有东西都可以访问控制器的上下文。控制器只是一个标准的Javascript构造函数,因此任何可能将其称为的函数都可以访问
中定义的内容。但是HTML模板不能:它们只能看到
$scope
上定义的内容。因此,标准是(大致):

控制器:对HTML模板、指令等共享的内容使用
$scope
。对本地访问的组件使用
,或仅在非常有限的情况下使用,如测试线束(如果有)

指令:对HTML模板或其他指令/控制器共享的任何内容使用
$scope
。避免使用

服务:使用
处理您希望对外公开的所有内容。为其他所有内容定义本地(私有)变量


筛选:避免将属性/方法暴露在外部。过滤器不应该以这种方式使用。

这两种方式都是可行的,并且都会起作用,公认的(标准)方式是
$scope