不使用作用域的AngularJS继承模式
AngularJS Inheritance Patterns without using scope?
我是angular js的新手,我正在通过各种伟大的链接学习它,其中我遇到的是继承,它显示了如何在angular js中获得继承,但我怀疑的是作者说"因为AngularJS不提供任何使用继承的内置功能,在这篇博文中,我将描述如何将一般的JavaScript继承模式应用到AngularJS组件中。"但是我们在angular中确实有继承的范围,那么他说的第一句话是什么意思?我是不是错过了什么?请解释。
因为AngularJS没有提供任何内置的特性继承
这意味着angular作为一个框架没有任何继承(代码重用)的机制,比如backbone的extend
功能。然而,你可能仍然需要从控制器或服务中继承功能,因此本文将向你展示如何在angular框架中使用原生JS来做到这一点。
在angular
中有继承的作用域
是的,作用域确实使用prototypes
,但它不是用于共享功能(代码重用),而是用于使子作用域能够访问父作用域的数据,而不需要额外的机制
AngularJs $Scope -在AngularJS中,$Scope是一个被组织成层次结构的对象。有一个根作用域,根作用域有一个或多个子作用域。每个视图都有自己的$scope(它是根作用域的子作用域),所以无论视图控制器在$scope变量上设置了什么变量,这些变量对其他控制器都是不可见的。
Inheritance—继承使您能够创建重用、扩展和修改在其他类中定义的行为的新类。继承其成员的类称为基类,继承这些成员的类称为派生类。派生类只能有一个直接基类。继承是可传递的。如果ClassC从ClassB派生,而ClassB从ClassA派生,则ClassC继承在ClassB和ClassA中声明的成员。
Angular是框架,JavaScript是编程语言,继承是语言特性而不是框架特性。所以从-如何在JavaScript中进行继承开始,它可以在angular(或任何其他框架)中使用,这只是在JavaScript中创建的库。
一些框架在主干中创建了像extend这样的方法,但是extend是在纯js中基于原型继承的方法。这不是魔法。同样的事情也可以在服务、作用域等的angular变量中实现。
Angular中常用的另一个涉及继承的设计范例是创建一个服务。我们可以创建一个服务,我们把它叫做BaseService,就像这样。
this.publicVar = '..'
this.method1 = function() ..
this.method2 = function() ..
var privateMethod = function() ..
var privateVar = '...';
return this;
and then in another service, inject the BaseService, and then begin by doing
this = Object.create(BaseService);
then you can extend the BaseService in this new service with other methods
this.newServiceMethod = function() ...
- AngularJS - 在自定义指令中继承ngModel
- AngularJS观察指令属性表达式,动态继承作用域
- AngularJS 1.X ES6继承问题
- AngularJS:多个工厂实例任何原型继承
- Angularjs.嵌套指令中的继承作用域
- AngularJS中的控制器/指令继承
- AngularJS自定义指令在继承父作用域时访问模板中的属性
- 使用 Angularjs module.service 的原型继承
- AngularJS$scope原型继承 - 原始与对象
- AngularJS$scope继承服务
- 在 AngularJS 指令中实现继承
- Angularjs将变量传递给具有继承(而非隔离)作用域的指令
- AngularJS中的继承和嵌套视图
- AngularJS服务继承
- AngularJS继承-覆盖$scope.method()
- AngularJS-$emit/$on或scope继承哪个更好
- AngularJS指令范围继承
- AngularJS中具有ui视图的根控制器的继承变量
- Angularjs的Typescript控制器继承和依赖注入
- 不使用作用域的AngularJS继承模式