Javascript 角度练习-使用范围继承与注入

Javascript 角度练习-使用范围继承与注入,javascript,angularjs,inheritance,Javascript,Angularjs,Inheritance,我在一次会议上提出了一个问题,我想征求一些专家的意见。 假设我有一个应用程序中许多控制器都需要的“用户服务”。(事实上,他们中的大多数人) 我相信,任何父控制器都会注入此userService,并将该服务的属性公开给子控制器。由于任何“子”控制器都可以访问父作用域,因此无需将“userService”注入每个控制器 另一个人的观点是将“userService”注入到每个需要它的控制器中,而不管该服务是否已经从其父级继承,这基本上是因为它使代码更易于阅读,也更容易找到变量的来源 对我来说,这种观点

我在一次会议上提出了一个问题,我想征求一些专家的意见。 假设我有一个应用程序中许多控制器都需要的“用户服务”。(事实上,他们中的大多数人)

我相信,任何父控制器都会注入此userService,并将该服务的属性公开给子控制器。由于任何“子”控制器都可以访问父作用域,因此无需将“userService”注入每个控制器

另一个人的观点是将“userService”注入到每个需要它的控制器中,而不管该服务是否已经从其父级继承,这基本上是因为它使代码更易于阅读,也更容易找到变量的来源

对我来说,这种观点似乎是错误的,并且忽略了角度、如何使用原型继承以及范围的力量。这不是真的在内存中创建了引用同一事物的不必要的实例吗?你为什么要这么做

我很想听到一些关于这方面的经验意见。
谢谢

有些参数是双向的,但我尽可能避免范围继承。我甚至在我的大多数指令上隔离作用域。原因是您可以更自然地解耦和封装代码。一般来说,封装在控制器上不是什么问题,但很高兴知道,无论您在作用域层次结构中的何处,都可以访问您的服务。

有些参数是双向的,但我尽可能避免作用域继承。我甚至在我的大多数指令上隔离作用域。原因是您可以更自然地解耦和封装代码。一般来说,封装在控制器上不是什么问题,但很高兴知道,无论您在作用域层次结构中的何处,都可以访问您的服务。

有些参数是双向的,但我尽可能避免作用域继承。我甚至在我的大多数指令上隔离作用域。原因是您可以更自然地解耦和封装代码。一般来说,封装在控制器上不是什么问题,但很高兴知道,无论您在作用域层次结构中的何处,都可以访问您的服务。

有些参数是双向的,但我尽可能避免作用域继承。我甚至在我的大多数指令上隔离作用域。原因是您可以更自然地解耦和封装代码。一般来说,封装在控制器上不是什么问题,但很高兴知道,无论您在作用域层次结构中的何处,都可以访问您的服务。

内存中的引用很便宜。别担心这些。更重要的是,当您将某项内容放在子级完成其“工作”所需的范围内时,您隐式地创建了一个依赖项,该依赖项将导致一个不可重用的组件。相反,您应该预先声明依赖项——通过参数列表。等你来测试的时候,你会感谢你自己的。作用域继承用于模板,而不是控制器。

内存中的引用很便宜。别担心这些。更重要的是,当您将某项内容放在子级完成其“工作”所需的范围内时,您隐式地创建了一个依赖项,该依赖项将导致一个不可重用的组件。相反,您应该预先声明依赖项——通过参数列表。等你来测试的时候,你会感谢你自己的。作用域继承用于模板,而不是控制器。

内存中的引用很便宜。别担心这些。更重要的是,当您将某项内容放在子级完成其“工作”所需的范围内时,您隐式地创建了一个依赖项,该依赖项将导致一个不可重用的组件。相反,您应该预先声明依赖项——通过参数列表。等你来测试的时候,你会感谢你自己的。作用域继承用于模板,而不是控制器。

内存中的引用很便宜。别担心这些。更重要的是,当您将某项内容放在子级完成其“工作”所需的范围内时,您隐式地创建了一个依赖项,该依赖项将导致一个不可重用的组件。相反,您应该预先声明依赖项——通过参数列表。等你来测试的时候,你会感谢你自己的。作用域继承用于模板,而不是控制器。

如果我错了,有人可以纠正我,但我认为它是这样工作的

控制器A
注入服务A。它可以通过
A.method
控制器B
继承自控制器A,但无法访问服务A,因为它不知道服务A是什么

当您将该服务分配给范围变量时,范围继承就开始发挥作用。如果我们现在更改它,以便
控制器A
设置
$scope.A=A
,那么
控制器B
将能够通过
$scope.A.method
访问该服务,因为它继承了该服务

我不认为注入的服务本身是继承的


就记忆而言,我不会太担心。Angular不会创建新实例,只是对它的引用。服务是单例的,除非被销毁,否则不会被重新创建。如果您使用的是工厂,那么您可能会得到新的对象,但这是不同的。

如果我错了,有人可以纠正我,但我认为它是这样工作的

控制器A
注入服务A。它可以通过
A.method
控制器B
继承自控制器A,但无法访问服务A,因为它不知道服务A是什么

当您将该服务分配给范围变量时,范围继承就开始发挥作用。如果我们现在更改它,以便
控制器A
设置
$scope.A=A
,那么
控制器B
将能够通过
$scope.A.method
访问该服务,因为它继承了该服务

我不认为注入的服务本身是继承的

就记忆而言,我不会太担心。Angular不会创建新实例,只是对它的引用。服务是